javascript - Javascript - 如何生成多个嵌套对象的数组?

我有这样一个对象。


let Filus = {


 male: {


 hat: [1],


 jacket: [2],


 pants: [3],


 shoes: [4],


 suit: [5]


 }


};



我想从这个对象中得到这个数组。


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



如何做?

时间:

使用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);

如果你拥有key ,也很容易:


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);

可以使用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)

你可以获取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; }

如果对象来自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)
...