我有一个物体对象。在这些对象中是具有更多对象的数组。 以下是结构。
我想找出父对象中最长的对象数组。 所以在下面的例子中:
对于ObjectOne - 最长的数组是B。
对于ObjectTwo,最长的数组是C.
mainobj = {
ObjectOne: {
A: [
{ x: 'd', y: 'e'},
{ x: 'd', y: 2}
],
B: [
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'}
],
C: [
{ x: 'd', y: 'e'}
]
},
ObjectTwo:{
A: [
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'}
],
B: [
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'}
],
C: [
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'}
]
}
}
我可以这样做:
var size = Object.values(mainobj).length
但我不知道如何更深入。例如,这不起作用:
var size = Object.values(mainobj)[0].length
This question is pretty similar,但我无法弄清楚如何应用它。 我很感激帮助!
答案 0 :(得分:2)
您可以为每个外键返回一个对象,并获得一个内部数组键最大的数组。
var object = { objectOne: { A: [{ x: 'd', y: 'e' }, { x: 'd', y: 2 }], B: [{ x: 'd', y: 'e' }, { x: 'd', y: 'e' }, { x: 'd', y: 'e' }, { x: 'd', y: 'e' }], C: [{ x: 'd', y: 'e' }] }, objectTwo: { A: [{ x: 'd', y: 'e' }, { x: 'd', y: 'e' }, { x: 'd', y: 'e' }], B: [{ x: 'd', y: 'e' }, { x: 'd', y: 'e' }], C: [{ x: 'd', y: 'e' }, { x: 'd', y: 'e' }, { x: 'd', y: 'e' }, { x: 'd', y: 'e' }, { x: 'd', y: 'e' }] } },
result = Object.keys(object).map(function (k) {
var o = object[k];
return {
key: k,
items: Object.keys(o).reduce(function (r, l, i) {
if (!i || o[r[0]].length < o[l].length) {
return [l];
}
if (o[r[0]].length === o[l].length) {
r.push(l);
}
return r;
}, [])
};
});
console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:0)
您可以将objet转换为仅保留具有最大长度的数组:
var mainObj = {
1:{
A: [
{ x: 'd', y: 'e'},
{ x: 'd', y: 2}
],
B: [
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'}
],
C: [
{ x: 'd', y: 'e'}
]
},
2:{
A: [
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'}
],
B: [
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'}
],
C: [
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'},
{ x: 'd', y: 'e'}
]
}
};
var res = {};
Object.keys(mainObj).forEach(key => {
var maxLength = 0, nameOfmaxLenghtArray, maxLenghtArray;
Object.keys(mainObj[key]).forEach(arrayName => {
if (mainObj[key][arrayName].length > maxLength) {
maxLengthArrayName = arrayName;
maxLenghtArray = mainObj[key][arrayName];
maxLength = mainObj[key][arrayName].length;
}
});
res[key] = { [maxLengthArrayName ]: maxLenghtArray};
});
console.log('res: ', res);
// You can then access the max length array for each sub-object of mainobj:
var subObject = '1';
var maxLengthArrayName = Object.keys(res[subObject])[0];
var maxLengthArray = Object.values(res[subObject])[0];
console.log(`max length array name for sub-object ${subObject}: `, maxLengthArrayName);
console.log(`max length array for sub-object ${subObject}: `, maxLengthArray );