2016-10-07 3 views
0

Как я могу сопоставить переменный автомобиль с переменным массивом? Мне нужно сопоставить каждый первый элемент (Buick, Mercedes, Chevrolet) с моей струной. Я этот случай должен быть зарегистрирован Buick и Chevrolet:Соответствующая строка с многослойным массивом

var car = "Buick, Chevrolet"; 
var array = [ 
    ["Buick", "2012", "USA", "1201"], 
    ["Mercedes", "2005", "Germany", "12354"], 
    ["Chevrolet", "1974", "USA", "9401"] 
]; 


if (car = array) { 
    console.log("Buick and Chevrolet matches."); 
}; 

Но строка может быть разной - иногда может быть совпадающая элементы 0, иногда 30 и так далее.

ответ

1

В современной Javascript используется Set и .filter для этого:

var car = "Buick, Chevrolet"; 
 
var array = [ 
 
    ["Buick", "2012", "USA", "1201"], 
 
    ["Mercedes", "2005", "Germany", "12354"], 
 
    ["Chevrolet", "1974", "USA", "9401"] 
 
]; 
 

 
var searchCars = new Set(car.match(/\w+/g)); 
 
var found = array.filter(([name]) => searchCars.has(name)); 
 

 
console.log(found);

+0

Nice один, не знал, что звук «Set» классный, я посмотрю :) –

0

Вы можете разделить строку и итерацию для каждого элемента и сверять массива.

var car = "Buick, Chevrolet", 
 
    array = [["Buick", "2012", "USA", "1201"], ["Mercedes", "2005", "Germany", "12354"], ["Chevrolet", "1974", "USA", "9401"]], 
 
    match = car.split(', ').every(function (a) { 
 
     return array.some(function (b) { return a === b[0]; }); 
 
    }); 
 

 
console.log(match);

var car = "Buick, Chevrolet", 
 
    array = [["Buick", "2012", "USA", "1201"], ["Mercedes", "2005", "Germany", "12354"], ["Chevrolet", "1974", "USA", "9401"]], 
 
    match = car.split(', ').every(function (a) { 
 
     return array.some(function (b) { return a === b[0]; }); 
 
    }); 
 
if (match) { 
 
    console.log(car.split(', ').join(' and ') + ' matches.'); 
 
}

0

Вы можете использовать reduce() проверку элемента с indexOf()

var car = "Buick, Chevrolet"; 
 
var array = [ 
 
    ["Buick", "2012", "USA", "1201"], 
 
    ["Mercedes", "2005", "Germany", "12354"], 
 
    ["Chevrolet", "1974", "USA", "9401"] 
 
]; 
 

 
var result = array.reduce(function(r, e, i) { 
 
    if (car.indexOf(e[0]) != -1) { 
 
    r.push(e[0]); 
 
    } 
 
    return r; 
 
}, []).join(' and ') + ' matches.'; 
 

 
console.log(result)

0

Вы можете использовать Array.reduce здесь

var car = "Buick, Chevrolet"; 
 
var array = [ 
 
    ["Buick", "2012", "USA", "1201"], 
 
    ["Mercedes", "2005", "Germany", "12354"], 
 
    ["Chevrolet", "1974", "USA", "9401"] 
 
]; 
 

 

 
var matches = array.reduce(function(result, item){ 
 
    if(car.indexOf(item[0]) > -1) result.push(item); 
 
    
 
    return result 
 
}, []); 
 

 
console.log(matches)

0

Вы должны перебрать массив и вы можете проверить на матч с помощью string.indexOf()

var car = "Buick, Chevrolet"; 
 
var array = [ 
 
    ["Buick", "2012", "USA", "1201"], 
 
    ["Mercedes", "2005", "Germany", "12354"], 
 
    ["Chevrolet", "1974", "USA", "9401"] 
 
]; 
 
var matches = []; 
 
var matchesStr = ""; 
 
array.forEach(function(item){ 
 
    if(car.indexOf(item[0]) > -1){ 
 
    matches.push(item[0]); 
 
    } 
 
}); 
 

 
if(matches.length > 0){ 
 
    var _last = matches.pop(); 
 
    matchesStr = matches.toString() + " and " + _last; 
 
} 
 
else{ 
 
    matchesStr = matches.toString() 
 
} 
 
console.log(matchesStr)

Кроме того, если у вас есть возможность обновить структуру, лучше иметь массив объектов вместо массива массивов.

0

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

var string = "Buick, Chevrolet"; 
var cars = [ 
    ["Buick", "2012", "USA", "1201"], 
    ["Mercedes", "2005", "Germany", "12354"], 
    ["Chevrolet", "1974", "USA", "9401"] 
]; 

var findCars= function(arr, str){ 
    return arr.filter(
     function(s){ 
       return str.indexOf(s[0])!==-1; 
     } 
    ).map(
     function(x){ 
     return x[0]; 
     } 
    ); 
} 

var res = findCars(cars, string); 
console.log(res.join(" and ") + " matches.") 

Если вам нужен весь элемент сопоставления данных позже, то вы должны пропустить отображение результата и findCars метод будет выглядеть следующим образом:

var findCars= function(arr, str){ 
    return arr.filter(
     function(s){ 
       return str.indexOf(s[0])!==-1; 
     } 
    ); 
} 
0

var car = "Buick, Chevrolet"; 
 
var array = [ 
 
    ["Buick", "2012", "USA", "1201"], 
 
    ["Mercedes", "2005", "Germany", "12354"], 
 
    ["Chevrolet", "1974", "USA", "9401"] 
 
]; 
 

 
var result = car 
 
       .split(', ') 
 
       .reduce(
 
       (res, car) => 
 
        (array.some(([arrayCar]) => car === arrayCar ? res.push(car) : null), res), 
 
       []); 
 

 
console.log(`${result.join(' and ')} matches`);

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