javascript - 将对象分组到具有不同标签的数组中
问题描述
{
'1512': {
title: 'title1',
},
'1513': {
title: 'title2',
},
'1514': {
title: 'title3',
},
'1515': {
title: 'title4',
},
'1516': {
title: 'title5',
},
'1517': {
title: 'title6',
},
'1518': {
title: 'title7',
},
}
我得到了上面的对象,我想做的是从中创建一个新数组。
例如,我想检查对象,如果 title === 'title1' 和 'title5' 推送类似 'title15 combined' <--- 不是很重要,但作为一个例子。然后再做一次检查,如果 title === 'title2' and 'title3' 它会将另一个项目推送到新数组中。
我得到了以下代码,但我希望它添加一项而不是两项,或者有多少条件匹配
const data = {
'1512': {
title: 'title1',
},
'1513': {
title: 'title2',
},
'1514': {
title: 'title3',
},
'1515': {
title: 'title4',
},
'1516': {
title: 'title5',
},
'1517': {
title: 'title6',
},
'1518': {
title: 'title7',
},
}
let array = []
for (const [key, value] of Object.entries(data)) {
if (value.title === 'title1' || value.title === 'title2') {
array.push('first')
} else if (value.title === 'title3' || value.title === 'title4') {
array.push('second')
}
}
console.log(array)
.as-console-wrapper { max-height: 100% !important; top: 0; }
所以不是输出第一,第一,第二,第二我想要第一,第二 - 我觉得代码也不是最佳的,但是哈 - 让我专注于让实现正确
解决方案
将先前的值存储在变量中,然后使用if
语句执行检查:
const data = {
'1512': {
title: 'title1',
},
'1513': {
title: 'title2',
},
'1514': {
title: 'title3',
},
'1515': {
title: 'title4',
},
'1516': {
title: 'title5',
},
'1517': {
title: 'title6',
},
'1518': {
title: 'title7',
},
}
let array = [];
let last;
for (const [key, value] of Object.entries(data)) {
if (value.title === 'title1' || value.title === 'title2') {
if (last != 'first') {
array.push('first')
last = 'first';
}
} else if (value.title === 'title3' || value.title === 'title4') {
if (last != 'second') {
array.push('second')
last = 'second';
}
}
}
console.log(array)
.as-console-wrapper {
max-height: 100% !important;
top: 0;
}
或者读取数组中的最后一个元素:
const data = {
'1512': {
title: 'title1',
},
'1513': {
title: 'title2',
},
'1514': {
title: 'title3',
},
'1515': {
title: 'title4',
},
'1516': {
title: 'title5',
},
'1517': {
title: 'title6',
},
'1518': {
title: 'title7',
},
}
let array = [];
for (const [key, value] of Object.entries(data)) {
let prev = array[array.length-1];
if (value.title === 'title1' || value.title === 'title2') {
if (prev != 'first') {
array.push('first')
}
} else if (value.title === 'title3' || value.title === 'title4') {
if (prev != 'second') {
array.push('second')
}
}
}
console.log(array)
.as-console-wrapper {
max-height: 100% !important;
top: 0;
}
推荐阅读
- json - 如果正在使用自定义类型,如何使 Yesod 成为 Key 记录?
- apache-camel - 升级到 3.7.2 后,Apache Camel 中的 FluentProducerTemplate 出现异常
- laravel - Laravel 电报机器人 sdk
- erpnext - 通过自定义脚本更新 frappe 触发字段
- grammar - BNF 语法规范
- android - XMLHttpRequest 未在 react-native Android 中触发/调用任何 [on] 回调
- javascript - 解析错误,我的类型检查器函数上缺少分号
- reactjs - 如何使用动态 url 路由正确管理状态
- node.js - 使用 parse: false in Hapi multipart/form-data 时,流似乎只有 1 个块
- android-studio - Android工作室:无法从gitlab找到包