2015-12-04 3 views
0

У меня есть два массива строк, как:Фильтрация двух массивов строк с lodash

var array = ["one", "two", "three", "six", "twelve", "thirteen", "twenty", "forty", "fifty"] 

var array1 = ["on", "t"]; 

Я хочу, чтобы фильтровать массив принимать любые элементы, которые начинаются с какой-либо из элементов в array1. Таким образом, после фильтрации массива должен выглядеть следующим образом:

["six", "forty", "fifty"]; 

Мне также нужно фильтровать массив, принимая любые элементы, которые имеют в них какие-либо из элементов в array1. Таким образом, после фильтрации массив должен выглядеть следующим образом:

["six"]; 

Сейчас я использую что-то вроде:

_.filter(array, function(n){return _.map(array1, function(m){ 
        return _.startsWith(n, m)})}) 

который возвращающегося

[[true, false], [false, true], [false, true], [false, false], 
[false, true], [false, true], [false, true], [false, false], [false, false]]; 
+0

КИ, так, Что ваш вопрос? –

+0

Я хочу, чтобы фильтр массива array1, желательно с lodash. Я не хочу быть тупой, но что непонятно с поста? – rashadb

+0

Вы все еще не задавали вопрос. Пока вы только что сделали заявления. Вы были частью SO достаточно долго, чтобы знать, что мы работаем, задавая * ответы * на * вопросы *. –

ответ

2

Нет lodash необходимости.

var array1 = ["one", "two", "three", "six", "twelve", "thirteen", "twenty", "forty", "fifty"] 

var array2 = ["on", "t"]; 

array1=array1.filter(function(a){ 
    return array2.every(function(b){ 
    return !a.includes(b) 
    }) 
}); 

http://jsfiddle.net/pbvLn788/

фильтр(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

каждый(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

включает в себя(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes

+0

Отличный ответ с чистым JS. – rashadb

+0

Рад помочь. И, кстати, никто раньше тебя не обманул. Вам просто нужно задать вопрос и код, необходимые для получения необходимых ответов. Вы просите кого-нибудь дать вам что-то бесплатно, поэтому сделайте все как можно проще, чтобы мы вам помогли, и не грубите, когда мы запрашиваем необходимую информацию. Никто не должен отвечать вам. –

0

Я нашел правильный ответ, прежде чем я увидел Джонатан М. Спасибо за сообщение, которое вы избили меня. Вот как я это сделал с LoDash.

_.filter(array, function(n){if (_.contains(_.map(array1, function(m){ 
           return _.startsWith(n, m)}), true)){ 
          } else { 
           return n;}})); 
+0

Вам не нужен 'startWith()', поскольку вы используете 'contains()'. Если он начинается с символа, он также содержит символ. –

0

Lo-тир способ решения этой проблемы:

var array1 = ["one", "two", "three", "six", "twelve", "thirteen", "twenty", "forty", "fifty"] 

var array2 = ["on", "t"]; 

var myArray = array1; 

_.remove(myArray, function(arr1Elem) { 
    return _.some(array2, function(arr2Elem) { 
    return _.includes(arr1Elem, arr2Elem); 
    }); 
}); 

console.log(myArray); 

https://jsfiddle.net/a2exvq3r/

Смежные вопросы