[{
"Screen Size": [{
"name": "15 inch - 15.9 inch",
"filter": "200067-200324",
"isChecked": true
}]
}, {
"Type": [{
"name": "Ultrabook",
"filter": "200060-200289",
"isChecked": true,
}, {
"name": "Notebook",
"filter": "200060-200290",
"isChecked": true,
}]
}, {
"Type": [{
"name": "Laptop",
"filter": "200060-200288",
"isChecked": true,
}, {
"name": "Ultrabook",
"filter": "200060-200289",
"isChecked": true,
}, {
"name": "Notebook",
"filter": "200060-200290",
"isChecked": true,
}]
}, {
"Brand": [{
"name": "HP",
"filter": "200140-200886",
"isChecked": true,
}, {
"name": "Lenovo",
"filter": "200140-200887",
"isChecked": true,
}]
}, {
"Brand": [{
"name": "HP",
"filter": "200140-200886",
"isChecked": true,
}, {
"name": "Lenovo",
"filter": "200140-200887",
"isChecked": true,
}, {
"name": "Dell",
"filter": "200140-200888",
"isChecked": true,
}]
}]从上面的对象数组中,我想过滤唯一键,即索引号最大的键。
例如,在品牌中,我想要最后一个,因为它会有一个更高的指数。
我将合并对象的这些数组,因此我只得到一个包含其内部对象的数组
预期输出
[{
"name": "15 inch - 15.9 inch",
"filter": "200067-200324",
"isChecked": true
}, {
"name": "Notebook",
"filter": "200060-200290",
"isChecked": true,
}, {
"name": "Dell",
"filter": "200140-200888",
"isChecked": true,
}]发布于 2020-12-24 20:48:36
您可以通过一个reduce()调用来实现这一点,获取第一个(only?)属性在累加器中对结果进行哈希处理,然后遍历值数组以检查更大的filter属性。
const
output = input.reduce((a, o) => {
let k = Object.keys(o)[0];
o[k].forEach(e => {
if ((a[k] ??= { ...e }).filter < e.filter) {
a[k] = { ...e };
}
});
return a;
}, {});
console.log(output); // Output is an object with each category as property.
console.log(Object.values(output)); // or Array from Object.values().as-console-wrapper { max-height: 100% !important; top: 0; }<script>
const input = [{ "Screen Size": [{ "name": "15 inch - 15.9 inch", "filter": "200067-200324", "isChecked": true }] }, { "Type": [{ "name": "Ultrabook", "filter": "200060-200289", "isChecked": true, }, { "name": "Notebook", "filter": "200060-200290", "isChecked": true, }] }, { "Type": [{ "name": "Laptop", "filter": "200060-200288", "isChecked": true, }, { "name": "Ultrabook", "filter": "200060-200289", "isChecked": true, }, { "name": "Notebook", "filter": "200060-200290", "isChecked": true, }] }, { "Brand": [{ "name": "HP", "filter": "200140-200886", "isChecked": true, }, { "name": "Lenovo", "filter": "200140-200887", "isChecked": true, }] }, { "Brand": [{ "name": "HP", "filter": "200140-200886", "isChecked": true, }, { "name": "Lenovo", "filter": "200140-200887", "isChecked": true, }, { "name": "Dell", "filter": "200140-200888", "isChecked": true, }] }]
</script>
如果您的顶级对象将具有多个属性,则需要迭代每个条目,而不仅仅是检索第一个属性。
const input = [
{
"Screen Size": [],
"Type": [],
"Brand": []
}, {
"Type": [],
"Brand": []
}
];
const
output = input.reduce((a, o) => {
Object.entries(o).forEach(([k, v]) => {
v.forEach(e => {
if ((a[k] ??= { ...e }).filter < e.filter) {
a[k] = { ...e };
}
});
});
return a;
}, {});
console.log(output); // Output is an object with each category as property.
console.log(Object.values(output)); // or Array from Object.values().as-console-wrapper { max-height: 100% !important; top: 0; }<script>
const input = [{ "Screen Size": [{ "name": "15 inch - 15.9 inch", "filter": "200067-200324", "isChecked": true }], "Type": [{ "name": "Ultrabook", "filter": "200060-200289", "isChecked": true, }, { "name": "Notebook", "filter": "200060-200290", "isChecked": true, }], "Brand": [{ "name": "HP", "filter": "200140-200886", "isChecked": true, }, { "name": "Lenovo", "filter": "200140-200887", "isChecked": true, }] }, { "Type": [{ "name": "Laptop", "filter": "200060-200288", "isChecked": true, }, { "name": "Ultrabook", "filter": "200060-200289", "isChecked": true, }, { "name": "Notebook", "filter": "200060-200290", "isChecked": true, }], "Brand": [{ "name": "HP", "filter": "200140-200886", "isChecked": true, }, { "name": "Lenovo", "filter": "200140-200887", "isChecked": true, }, { "name": "Dell", "filter": "200140-200888", "isChecked": true, }] }]
</script>
https://stackoverflow.com/questions/65438239
复制相似问题