#javascript
#javascript
Вопрос:
У меня есть набор массивов :
var arr = [
[ 'AAAA.10', 'S10' ],
[ 'AAAA.10', 'S11' ],
[ 'AAAA.12', 'S12' ],
[ 'AAAA.13', 'S13' ],
[ 'AAAA.14', 'S14' ] ]
Я хочу выполнить поиск по значениям массива, если какие-либо совпадения найдены, я хочу вернуть весь массив.
Если я ищу, как 10
тогда он должен проверить значения массива, если совпадения найдены (так что совпадение есть AAAA.10
), тогда он должен вернуть весь массив следующим образом: [[ 'AAAA.10', 'S10' ], [ 'AAAA.10', 'S11' ]]
.
Я пробовал использовать приведенный ниже код, но он не работает :
console.log(arr.find('10'));
Пожалуйста, помогите мне добиться результата.
Ответ №1:
Используя forEach
и find
var arr = [
['AAAA.3', 'S3'],
['AAAA.4', 'S4'],
['AAAA.5', 'S5'],
['AAAA.6', 'S6'],
['AAAA.7', 'S7'],
['AAAA.8', 'S8'],
['AAAA.9', 'S9'],
['AAAA.10', 'S10'],
['AAAA.10', 'S11'],
['AAAA.12', 'S12'],
['AAAA.13', 'S13'],
['AAAA.14', 'S14']
];
var arr1 = [];
function a(str) {
arr.forEach(e => {
e.find(x => {
if (x.includes(str)) {
arr1.push(e)
}
})
})
}
a('10');
console.log(arr1);
Ответ №2:
Вы можете использовать Array.find
для проверки каждого вложенного массива, содержит ли он требуемую строку, а затем накапливать результаты с помощью Array.reduce
:
var arr = [ [ 'AAAA.3', 'S3' ],
[ 'AAAA.4', 'S4' ],
[ 'AAAA.5', 'S5' ],
[ 'AAAA.6', 'S6' ],
[ 'AAAA.7', 'S7' ],
[ 'AAAA.8', 'S8' ],
[ 'AAAA.9', 'S9' ],
[ 'AAAA.10', 'S10' ],
[ 'AAAA.10', 'S11' ],
[ 'AAAA.12', 'S12' ],
[ 'AAAA.13', 'S13' ],
[ 'AAAA.14', 'S14' ] ];
function searchStr(search){
const output = arr.reduce((acc, ele) => {
let arr = ele.find(str => str.includes(search));
return arr ? acc.concat(ele) : acc;
}, []);
return output;
}
console.log(searchStr("10"));
Ответ №3:
Вы можете split
найти первый элемент во вложенном массиве по адресу .
и использовать filter
следующим образом:
let arr=[['AAAA.3','S3'],['AAAA.4','S4'],['AAAA.5','S5'],['AAAA.6','S6'],['AAAA.7','S7'],['AAAA.8','S8'],['AAAA.9','S9'],['AAAA.10','S10'],['AAAA.10','S11'],['AAAA.12','S12'],['AAAA.13','S13'],['AAAA.14','S14']]
let result = arr.filter(a => a[0].split('.')[1] === "10")
console.log(result)
Если у вас есть поддержка деструктурирования, вы можете сделать:
arr.filter(([key]) => key.split('.')[1] === "10")
Обновить:
Если вы хотите выполнить поиск по обоим индексам, вы можете использовать includes
:
var arr=[['AAAA.3','S3'],['AAAA.4','S4'],['AAAA.5','S5'],['AAAA.6','S6'],['AAAA.7','S7'],['AAAA.8','S8'],['AAAA.9','S9'],['AAAA.10','S10'],['AAAA.10','S11'],['AAAA.12','S12'],['AAAA.13','S13'],['AAAA.14','S14']]
function getResults(arr, search){
return arr.filter(a => a[0].includes(search) || a[1].includes(search))
}
console.log(getResults(arr, "10"))
console.log(getResults(arr, "S1"))
Ответ №4:
function checkNum(arr, num) {
return arr.filter(ele => ele[0].split('.')[1] === String(num))
}
checkNum(arr, 10);
Комментарии:
1.
num
вы упомянули, что это строка. Значение поиска может быть любым2. Я не хочу разделяться, пользователь будет искать как
AA
илиS1
или что угодно
Ответ №5:
Вы можете попробовать этот код:
var arr = [ [ 'AAAA.3', 'S3' ],
[ 'AAAA.4', 'S4' ],
[ 'AAAA.5', 'S5' ],
[ 'AAAA.6', 'S6' ],
[ 'AAAA.7', 'S7' ],
[ 'AAAA.8', 'S8' ],
[ 'AAAA.9', 'S9' ],
[ 'AAAA.10', 'S10' ],
[ 'AAAA.10', 'S11' ],
[ 'AAAA.12', 'S12' ],
[ 'AAAA.13', 'S13' ],
[ 'AAAA.14', 'S14' ] ];
function search(index){
for(i = 0; i<=arr.length-1; i ){
if(arr[i].indexOf(index)>-1){
console.log(arr[i]);
}
}
}
search("AAAA.10");
Ответ №6:
Если все элементы в вашем внутреннем массиве будут строковыми значениями, вы можете объединить их и выполнить поиск по строке.
var arr = [ [ 'AAAA.3', 'S3' ], [ 'AAAA.4', 'S4' ], [ 'AAAA.5', 'S5' ], [ 'AAAA.6', 'S6' ], [ 'AAAA.7', 'S7' ], [ 'AAAA.8', 'S8' ], [ 'AAAA.9', 'S9' ], [ 'AAAA.10', 'S10' ], [ 'AAAA.10', 'S11' ], [ 'AAAA.12', 'S12' ], [ 'AAAA.13', 'S13' ], [ 'AAAA.14', 'S14' ] ];
const searchValue = '10';
const output = arr.filter((item) => item.join('||').includes(searchValue) );
console.log(output)
Если у вас есть объекты или вы предпочитаете вложенный цикл, вы также можете попробовать что-то вроде этого:
var arr = [ [ 'AAAA.3', 'S3' ], [ 'AAAA.4', 'S4' ], [ 'AAAA.5', 'S5' ], [ 'AAAA.6', 'S6' ], [ 'AAAA.7', 'S7' ], [ 'AAAA.8', 'S8' ], [ 'AAAA.9', 'S9' ], [ 'AAAA.10', 'S10' ], [ 'AAAA.10', 'S11' ], [ 'AAAA.12', 'S12' ], [ 'AAAA.13', 'S13' ], [ 'AAAA.14', 'S14' ] ];
const searchValue = '10';
const output = arr.filter((item) => item.some((value) => value.includes(searchValue) ) );
console.log(output)
Ответ №7:
Вы можете использовать filter
для возврата нового массива и внутри filter
обратного вызова проверить, заканчиваются ли внутренние элементы соответствующим значением, и использовать endsWith
для этого.
Вы можете использовать, includes
если хотите получить массив элементов, которые includes
val
находятся в любой позиции
Также обратите внимание, что это вернет, если оба элемента внутри вложенного массива имеют совпадающий символ, но если вы используете ||
вместо amp;amp;
, это также вернет ['AAAA.10', 'S11']
var arr = [
['AAAA.3', 'S3'],
['AAAA.4', 'S4'],
['AAAA.5', 'S5'],
['AAAA.6', 'S6'],
['AAAA.7', 'S7'],
['AAAA.8', 'S8'],
['AAAA.9', 'S9'],
['AAAA.10', 'S10'],
['AAAA.10', 'S11'],
['AAAA.12', 'S12'],
['AAAA.13', 'S13'],
['AAAA.14', 'S14']
]
function findNestArray(val) {
return arr.filter(function(item) {
if (item[0].endsWith(val)) {
return item
}
})
}
console.log(findNestArray('10'))
Ответ №8:
Попробуйте этот самый простой:
var result = arr.filter(function(item){
return item[0].includes(10);
})
console.log(result);
Метод filter проверяет каждый элемент массива. Затем возвращает элемент в соответствии с возвращаемым значением данной функции. Метод filter передает каждый элемент в качестве аргумента данной функции. Если функция возвращает значение true, элемент выбран. Метод includes проверяет, содержит ли строка 10. Вы можете использовать item[0].endsWith("10")
для проверки 10 в последней позиции.