将嵌套对象展平为一维数组javascript [英] Flatten a nested objects to one dimensional array javascript

查看:88
本文介绍了将嵌套对象展平为一维数组javascript的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在此结构中有一个嵌套对象:

I have a nested objects in this structure:

myArray = {
  "D": {
    "U": {
      "A300": "B300",
      "A326": "B326",
      "A344": "B344",
      "A345": "B345"
    },
    "P": {
      "A664": "B664",
      "A756": "B756"
    }
  },
  "I": {
    "U": {
      "A300": "B300",
      "A326": "B326"
    },
    "P": {
      "A756": "B756"
    }
  }
};

我正在尝试从中获取数据仅为一维(平面).我尝试了下面的代码,但没有用:

I am trying to get the data out of it to be only one dimensional (Flatten). I tried the code below but it doesn't work:

var myNewArray = [].concat.apply([], myArray);

var myNewArray = myArray.reduce(function(prev, curr) {
  return prev.concat(curr);
});

我希望myNewArray具有["B300","B326","B344","B345","B664","B756"]

推荐答案

您可以执行以下操作:

var myArray = [];
myArray[0] = [];
myArray[0][0] = [];
myArray[0][0][0] = [];
myArray[0][0][1] = [];
myArray[0][1] = [];
myArray[0][1][0] = [];

myArray[0][0][0][0] = "abc1";
myArray[0][0][0][1] = "abc2";
myArray[0][0][1][0] = "abc3";
myArray[0][1][0][1] = "abc4";
myArray[0][1][0][1] = "abc5";


function flat(acc, val){
  if(Array.isArray(val)){
     acc = acc.concat(val.reduce(flat, []));
  }else{
   acc.push(val);
  }
  return acc;
}

var newMyArray = myArray.reduce(flat, []);
console.log(newMyArray);

这是递归地减少作为数组的所有内部值.

What this does is to recursively reduce all the inner values that are arrays.

似乎您正在处理一个对象.您问题的上一个标题和变量名称具有误导性.

It seems that you're dealing with an object. The previous title of your question and the name of the variable are misleading.

在任何情况下,展平对象都是非常相似的过程.

In any case, flattening an object is a very similar process.

var myArray = {"D":{"U":{"A300":"B300","A326":"B326","A344":"B344","A345":"B345"},"P":{"A664":"B664","A756":"B756"}},"I":{"U":{"A300":"B300","A326":"B326"},"P":{"A756":"B756"}}};

function flatObj(obj){
   return Object.keys(obj).reduce(function(acc, key){
     if(typeof obj[key] === "object"){
        acc = acc.concat(flatObj(obj[key]));
     }else{
        acc.push(obj[key]);
     }
     return acc;
   }, []);
}


var newMyArray = flatObj(myArray);
console.log(newMyArray);

这篇关于将嵌套对象展平为一维数组javascript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆