【问题标题】:access nested uncounted arrays in JavaScript在 JavaScript 中访问嵌套的不计数数组
【发布时间】:2021-12-10 10:29:09
【问题描述】:

我已经嵌套了用户创建的数组。 我想要一个 JavaScript 代码来访问例如其中的“g”元素

var nestedArrays = [
  [a,b,c,d],
  [e,f,[
    g,h
  ]]
];

在此示例中,我可以使用此代码访问“g”元素

var element = nestedarrays[2][1][1];

但是如果“g”嵌套在 100 个数组中,我必须写很多方括号

var g = nestedArrays[2][3][1][?][?].....[?];

或者我不知道“g”嵌套了多少

IS 有一个简单的代码可以使用纯 javascript 或 jquery 获取嵌套数组中的任何元素???

【问题讨论】:

标签: javascript arrays multidimensional-array


【解决方案1】:
我们都知道数组是从零开始的。

在您访问'g'的第一个示例中您需要访问:

  • 第二个位置(索引[1])是['e','f',['g','h']]
  • 然后访问第三个位置(索引[2]),即['g','h']
  • 最后是第一个位置(索引[0]),你得到'g'
var nestedArrays = [['a','b','c','d'],['e','f',['g','h']]];
let x = nestedArrays[1][2][0];
console.log(x); // g

因此我们可以说访问'g'
我们需要遵循这条索引之路[1,2,0]

var nestedArrays = [['a','b','c','d'],['e','f',['g','h']]];
let roadToG = [1,2,0];

for(let i = 0; i < roadToG.length; i++){
    nestedArrays = nestedArrays[roadToG[i]];
}
console.log(nestedArrays); // g

但是如果“g”嵌套在 100 个数组中,我必须写很多方括号,因为它 var g = nestedArrays[2][3][1][?][?].....[?];

如果我们想在没有硬代码的情况下动态访问'g'索引之路;我们必须在数组中递归循环,直到找到'g',在循环中我们跟踪道路

function loopRecursively( arr, x ,roadToX = []){
    if(JSON.stringify(arr).indexOf(x) == -1) return null; //in edge case where there is no x in array; we just return null!
    for ( let i = 0; i < arr.length; i++ ) {
        if( arr[i] == x ){
            roadToX.push(i);
        } else if( Array.isArray( arr[i] ) && JSON.stringify(arr[i]).indexOf(x) != -1 ){
            roadToX.push(i);
            loopRecursively( arr[i] , x, roadToX);
        }
    }
    return roadToX;
}
let nestedArrays = [['a','b','c','d'],['e','f',['g','h']]];
console.log( loopRecursively( nestedArrays, 'g' ) ); // [1, 2, 0]

【讨论】:

  • 我想要一个嵌套数组深处的元素我尝试了您在控制台中编写的第二个代码,它工作但在我的代码中显示此错误>>未捕获的语法错误:输入意外结束
【解决方案2】:

如果你只是想找到一个特定的元素,你可以 flatten 数组和 find 那样。

var nestedArrays = [
  ['a','b','c','d'],
  ['e','f',[
    'g','h'
  ]]
];

const g = nestedArrays.flat(Infinity).find(x => x === 'g');

console.log(g);

【讨论】:

  • 我不是那个意思,但它会在代码的另一部分有所帮助....谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 2016-09-14
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
相关资源
最近更新 更多