Tru*_*246 5 javascript arrays multidimensional-array
免责声明:这个问题并不像同此一个.
我有一个嵌套数组的例子:
var testArray = [
true,
"",
[
1,
{a: 2, b: [3, false]},
[2, []],
null
],
4,
undefined,
[5, "test"],
function() {}
];
Run Code Online (Sandbox Code Playgroud)
如何在嵌套数组中获取valueOf,如:
testArray.multiIndexOf(null); //Expected result will be [2, 3]
Run Code Online (Sandbox Code Playgroud)
我将解释这里发生的事情.
首先,我们将testArray分解为:
var testArrayExplain = [0, 1, [0, 1, [0, 1], 3], 3, 4, [0, 1], 6];
Run Code Online (Sandbox Code Playgroud)
正如你在这里看到的,这个数组和上面的数组一样:第一层数组的长度为7,然后看一下位置#2的值,我们将看到另一个数组嵌套到第一层.正如您从上面记得的那样,该null值与第一个数组的位置#2处的数组中的位置#3具有相同的确切位置
因此,我们将具有第一层位置,然后是第二层位置null:,[2, 3]存储在从第一层到最后一层排序的数组中.
另一个例子:
var testArrayTwo = [1,[2,3,4],5,[6,[7,8],9,10],11,12];
testArrayTwo.multiIndexOf(6); //return [3, 0]
Run Code Online (Sandbox Code Playgroud)
可选:如果嵌套数组有两个相同的值,那么获取第一个值的位置,还是存储两个位置的数组?如果value不在嵌套数组中,return -1比如indexOf?
我问得太多了吗?这个问题对未来的开发人员很重要吗?
您可以迭代数组并在找到所需项目时停止.如果可能,请查看嵌套数组并继续.
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));Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)