如何制作多个嵌套对象的数组?

时间:2019-05-11 08:23:58

标签: javascript arrays object ecmascript-6

我有这样的东西。

let Filus = {
     male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

我想从该对象获取此数组。

let Filus = [1,2,3,4,5];

如何做到?

4 个答案:

答案 0 :(得分:6)

您可以使用Object.values()获取嵌套对象male的值,然后使用flat()

let Filus = { male : { hat: [1], jacket: [2], pants: [3], shoes: [4], suit: [5] } };

const res = Object.values(Filus.male).flat();
console.log(res)

您也可以使用flat()和散布运算符在不使用concat()的情况下执行此操作。

let Filus = { male : { hat: [1], jacket: [2], pants: [3], shoes: [4], suit: [5] } };

const res = [].concat(...Object.values(Filus.male));
console.log(res)

答案 1 :(得分:4)

只需使用Object.valuesflat-即使您不知道嵌套对象的键也可以使用:

let Filus = {
  male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

const res = Object.values(Object.values(Filus)[0]).flat();
console.log(res);

ES5语法:

var Filus = {
  male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

var res = Object.keys(Filus[Object.keys(Filus)[0]]).map(function(key) { 
  return Filus[Object.keys(Filus)[0]][key];
}).reduce(function(acc, curr) {
  return acc.concat(curr);
});

console.log(res);


如果有钥匙,也很容易:

let Filus = {
  male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

const res = Object.values(Filus.male).flat();
console.log(res);

ES5语法:

var Filus = {
  male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

var res = Object.keys(Filus.male).map(function(key) { 
  return Filus.male[key];
}).reduce(function(acc, curr) {
  return acc.concat(curr);
});

console.log(res);

答案 2 :(得分:2)

您可以使用Generator并返回该对象及其嵌套对象的所有找到的值。

这种方法依赖于对象的语言固有顺序。

function* values(o) {
    if (o && typeof o === 'object') for (let v of Object.values(o)) yield* values(v);
    else yield o;
} 

let filus = { male: { hat: [1], jacket: [2], pants: [3], shoes: [4], suit: [5] } },
    result = [...values(filus)];

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 3 :(得分:1)

如果对象来自JSON字符串,则可以在解析期间提取数字:

var arr = [], json = '{"male":{"hat":[1],"jacket":[2],"pants":[3],"shoes":[4],"suit":[5]}}'

JSON.parse(json, (k, v) => v.toFixed && arr.push(v))

console.log(arr)