gpt4 book ai didi

javascript - 如何在javascript中获取嵌套数组中值的indexOf位置?

转载 作者:数据小太阳 更新时间:2023-10-29 06:00:27 24 4
gpt4 key购买 nike

免责声明:此问题与 this one 不同.

我有一个嵌套数组的例子:

var testArray = [
true,
"",
[
1,
{a: 2, b: [3, false]},
[2, []],
null
],
4,
undefined,
[5, "test"],
function() {}
];

如何获取嵌套数组中某个值的 indexOf,例如:

testArray.multiIndexOf(null); //Expected result will be [2, 3]

我将解释这里发生的事情。

首先,我们将 testArray 分解为:

var testArrayExplain = [0, 1, [0, 1, [0, 1], 3], 3, 4, [0, 1], 6];

正如你在这里所看到的,这个数组与上面的一样:第一层数组的长度为 7,然后查看 location #2 的值>,我们将看到另一个数组嵌套到第一个数组。正如您从上面所记得的那样,null 值与第一个数组location #2 中的 location #3 具有相同的精确位置

所以我们将第一层位置然后第二层位置为空:[2, 3],存储在从第一层到最后一层排序的数组中。

另一个例子:

var testArrayTwo = [1,[2,3,4],5,[6,[7,8],9,10],11,12];
testArrayTwo.multiIndexOf(6); //return [3, 0]

可选:如果嵌套数组有两个相同的值,那么获取第一个值的位置,或者存储两个位置的数组?如果值不在嵌套数组中,return -1 like indexOf?

我是不是要求太多了?这个问题对 future 的开发者重要吗?

最佳答案

您可以迭代数组并在找到想要的项目时停止。如果可能,请查找嵌套数组并继续。

Array.prototype.multiIndexOf = function (value) {
var result;
this.some(function iter(path) {
return function (a, i) {
if (a === value) {
result = path.concat(i);
return true;
};
return Array.isArray(a) && a.some(iter(path.concat(i)));
}
}([]));
return result;
}

var testArray = [true, "", [1, { a: 2, b: [3, false] }, [2, []], null], 4, undefined, [5, "test"], function () { }];

console.log(testArray.multiIndexOf(null));
console.log([1, [2, 3, 4], 5, [6, [7, 8], 9, 10], 11, 12].multiIndexOf(6));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何在javascript中获取嵌套数组中值的indexOf位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39929796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com