使用高阶函数在数组中查找数组的索引?
Finding the index of an array in an array using higher order functions?
我可以找到一个数组是否存在于另一个数组中:
const arr1 = [[1,2,3],[2,2,2],[3,2,1]];
const match = [2,2,2];
// Does match exist
const exists = arr1.some(item => {
return item.every((num, index) => {
return match[index] === num;
});
});
我可以找到那个数组的索引:
let index;
// Index of match
for(let x = 0; x < arr1.length; x++) {
let result;
for(let y = 0; y < arr1[x].length; y++) {
if(arr1[x][y] === match[y]) {
result = true;
} else {
result = false;
break;
}
}
if(result === true) {
index = x;
break;
}
}
但是用JS的高阶函数可以找到索引吗?我看不到类似的 question/answer,它的语法更清晰
谢谢
你可以 Array#findIndex
.
const
array = [[1, 2, 3], [2, 2, 2], [3, 2, 1]],
match = [2, 2, 2],
index = array.findIndex(inner => inner.every((v, i) => match[i] === v));
console.log(index);
另一种方法是将数组的inner-arrays
转换为字符串['1,2,3', '2,2,2', '3,2,1']
,并将匹配的数组转换为字符串2,2,2
。然后使用内置函数 indexOf
在数组中搜索该索引。
const arr1 = [[1,2,3],[2,2,2],[3,2,1]];
const match = [2,2,2];
const arr1Str = arr1.map(innerArr=>innerArr.toString());
const index = arr1Str.indexOf(match.toString())
console.log(index);
我可以找到一个数组是否存在于另一个数组中:
const arr1 = [[1,2,3],[2,2,2],[3,2,1]];
const match = [2,2,2];
// Does match exist
const exists = arr1.some(item => {
return item.every((num, index) => {
return match[index] === num;
});
});
我可以找到那个数组的索引:
let index;
// Index of match
for(let x = 0; x < arr1.length; x++) {
let result;
for(let y = 0; y < arr1[x].length; y++) {
if(arr1[x][y] === match[y]) {
result = true;
} else {
result = false;
break;
}
}
if(result === true) {
index = x;
break;
}
}
但是用JS的高阶函数可以找到索引吗?我看不到类似的 question/answer,它的语法更清晰
谢谢
你可以 Array#findIndex
.
const
array = [[1, 2, 3], [2, 2, 2], [3, 2, 1]],
match = [2, 2, 2],
index = array.findIndex(inner => inner.every((v, i) => match[i] === v));
console.log(index);
另一种方法是将数组的inner-arrays
转换为字符串['1,2,3', '2,2,2', '3,2,1']
,并将匹配的数组转换为字符串2,2,2
。然后使用内置函数 indexOf
在数组中搜索该索引。
const arr1 = [[1,2,3],[2,2,2],[3,2,1]];
const match = [2,2,2];
const arr1Str = arr1.map(innerArr=>innerArr.toString());
const index = arr1Str.indexOf(match.toString())
console.log(index);