如何使用JavaScript解析嵌套数组中的JSON值

时间:2019-02-16 10:09:08

标签: javascript arrays json object javascript-objects

我有一个如下所示的数组。现在,我想通过循环获取“名称”键的所有值。如何获得?

我尝试过。但是我无法得到正确的结果

dangle=  [[{name:"jack",age:"20"}],
         [{name:"ram",age:"25"}], 
         [{name:"vishy",age:"45"}]]

我期望“ jack”,“ ram”,“ vishy”。但是它显示第一个索引值,例如“ jack”,“ 20”。下面附上我尝试过的代码。给我一个建议以获得正确的输出。谢谢

这是我的代码

for(i=0;i<dangle.length;i++)
{
   alert(dangle[i]);
}

2 个答案:

答案 0 :(得分:0)

有很多方法可以遍历数组。一种使用for循环的常见方式。 for循环可以有很多变体:

  • 标准for循环(遍历数字,其中i是每个数字):

    for(let i = 0; i < dangle.length; i++) { // loop through the dangle array
      let arr = dangle[i]; // get each inner array from index `i`
      for(let j = 0; j < arr.length; j++) { // loop through the inner array
        console.log(arr[j].name); // print the name of each object
      }
    }
    

let dangle =  [[{name:"jack",age:"20"}], [{name:"ram",age:"25"}],[{name:"vishy",age:"45"}]];
        
for (let i = 0; i < dangle.length; i++) {
  let arr = dangle[i];
  for (let j = 0; j < arr.length; j++) {
    console.log(arr[j].name);
  }
}

  • for of循环(遍历数组元素,其中arr是元素):

    for(let arr of dangle) { // get each inner array in dangle (current inner array is referenced as arr)
      for(let obj of arr) { // loop through the contents in the current inner array, where obj is the contents
        console.log(obj.name); // print the name of the contents
      }
    }
    

let dangle =  [[{name:"jack",age:"20"}],[{name:"ram",age:"25"}],[{name:"vishy",age:"45"}]];
         
for(let arr of dangle) {
  for(let obj of arr) {
    console.log(obj.name);
  }
}

  • .forEach高阶函数(遍历数组元素,其中arr是每个数组中的元素)

    dangle.forEach(arr => arr.forEach(obj => {
      console.log(obj.name);
    }));
    

let dangle =  [[{name:"jack",age:"20"}],[{name:"ram",age:"25"}], [{name:"vishy",age:"45"}]];         

dangle.forEach(arr => arr.forEach(obj => { // loop through the outer array to access each inner array, loop through each inner array
  console.log(obj.name); // print the objects name retrieved from the inner array
}));

通知:在以上示例中,我使用了2个循环。这样做的原因是因为您有一个二维数组(另一个数组中的一个数组)。这意味着外部for循环用于访问每个内部数组。然后,内部for循环遍历每个内部数组中的元素(在您的情况下为对象)。由于每个内部数组中只有一个对象,因此可以删除内部for循环,并且可以访问每个内部数组的0th索引。但是,出于可扩展性和可维护性的目的,我使用了一个内部for循环,这样,如果您确实有多个对象,则仍然可以使用

因此,您可以使用以下其中一种for循环使用您的姓名填充空数组:

let names = [];
for(let arr of dangle) {
  for(let obj of arr) {
    names.push(obj.name); // add the name to the names array
  }
}

console.log(names);

let dangle=  [[{name:"jack",age:"20"}], [{name:"ram",age:"25"}], [{name:"vishy",age:"45"}]]

let names = [];
for(let arr of dangle) {
  for(let obj of arr) {
    names.push(obj.name); // add the name to the names array
  }
}

console.log(names);

答案 1 :(得分:-1)

您只能使用.map().concat()来获取名称数组:

const data = [
  [{name:"jack",age:"20"}],
  [{name:"ram",age:"25"}], 
  [{name:"vishy",age:"45"}]
];

const result = [].concat(...data).map(({ name }) => name);

console.log(result);