我有一个2D数组和一个函数,它将返回值Q的索引。我如何编写函数才能得到AllIndexOfQ?所以如果我在找“狗”,我会得到0,0,1,2,3,3,3,2
var arr = Array(['dog', 'cat', 'fish'], ['fish', 'fish', 'dog'], ['cat', 'tiger', 'fish'], ['cat', 'dog', 'dog']);
function getIndexOfQ(data, q) {
for (var i = 0; i < data.length; i++) {
var index = data[i].indexOf(q);
if (index > -1) {
return [i, index];
}
}
}
var a = getIndexOfQ(arr, "dog");
console.log(a);
发布于 2020-04-22 11:26:27
不要使用return,而是推到数组。而且,indexOf是不够的,因为这并不能找到所有的匹配,仅仅是第一个匹配。您必须遍历子数组的每个项,如果匹配,则将两个指示符的数组推送到匹配数组中:
var arr = Array(['dog', 'cat', 'fish'], ['fish', 'fish', 'dog'], ['cat', 'tiger', 'fish'], ['cat', 'dog', 'dog']);
function getIndexOfQ(data, q) {
const matches = [];
data.forEach((arr, i) => {
arr.forEach((item, j) => {
if (item === q) {
matches.push([i, j]);
}
});
});
return matches;
}
var a = getIndexOfQ(arr, "dog");
console.log(a);
发布于 2020-04-22 11:27:58
arr.indexOf(searchElement[, fromIndex])按MDN。
这意味着您可以循环遍历数组,每次指定一个起点来查找所有发生的事件。
发布于 2020-04-22 11:28:44
很难为多个匹配编写一行。
const arr = [['dog', 'cat', 'fish'], ['fish', 'fish', 'dog'], ['cat', 'tiger', 'fish'], ['cat', 'dog', 'dog']];
const getIndexOfQ = (data, q) => {
let matches = [];
data.forEach((a, i) => {
a.forEach((item, j) => { if (item === q) matches.push([i, j]) })
})
return matches;
};
const a = getIndexOfQ(arr, "dog");
console.log(a);
如果您只想在每个数组中找到一条狗,请尝试此方法。
const arr = [['dog', 'cat', 'fish'], ['fish', 'fish', 'dog'], ['cat', 'tiger', 'fish'], ['cat', 'dog', 'dog']];
const getIndexOfQ = (data, q) => data.map(
(item,i) => (item.indexOf(q) !==-1) ? [i,item.indexOf(q)] : false)
.filter(item => item);
const a = getIndexOfQ(arr, "dog");
console.log(a);
https://stackoverflow.com/questions/61363872
复制相似问题