问题描述
我的数组看起来像,但包含 1000 多个对象:
data = {
0: {
code: '3019476',_id: '60033f61-8a4e-4622-9731-decd07bc44e1',vendor: 'DKNY',tags: [
{ type: 1,label: 'dsfs' },{ type: 2,label: 'thisOne' },{ type: 3,label: 'sdas' },],},1: {
code: '3019475',_id: '60033f61-8a4e-4622-9731-decd07bc44e0',label: 'sdfsd' },label: 'anotherone' },2: {
code: '3019474',_id: '60033f61-8a4e-4622-9731-decd07bc44e9',label: 'gregf' },};
我希望这是输出:
0: {title: "thisOne",data: Array(2)"}
1: {title: "anotherone",data: Array(1)"}
所以我想过滤并计算有多少个对象包含不同的 tag[1].label,将完整的项目数据保存在结果中的 'data' 中。
我所有的想法都失败了,所以我真的需要你的帮助
解决方法
数据中有很多语法错误,修复它们,它应该可以工作。请参阅下面的代码片段。
注意:对象中的键/值对应该用逗号分隔,dsfs
、thisOne
sdas
应该是有效的变量或字符串。
data = {
0: {
code: '3019476',_id: '60033f61-8a4e-4622-9731-decd07bc44e1',vendor: 'DKNY',tags: [
{ type: 1,label: 'dsfs' },{ type: 2,label: 'thisOne' },{ type: 3,label: 'sdas' },],},1: {
code: '3019475',_id: '60033f61-8a4e-4622-9731-decd07bc44e0',label: 'sdfsd' },label: 'anotherOne' },2: {
code: '3019474',_id: '60033f61-8a4e-4622-9731-decd07bc44e9',label: 'gregf' },};
console.log(data[0].tags[1].label)
你不需要 lodash。您可以使用普通的 javascript。
const data= [
{code: "3019476",_id: "60033f61-8a4e-4622-9731-decd07bc44e1",vendor: "DKNY",tags: [{type: 1,label: 'dsfs'},{type: 2,label: 'thisOne'},{type: 3,label: 'sdas'}]},{code: "3019475",_id: "60033f61-8a4e-4622-9731-decd07bc44e0",label: 'sdfsd'},label: 'anotherOne'},label: 'sdfsd'}]},{code: "3019474",_id: "60033f61-8a4e-4622-9731-decd07bc44e9",label: 'gregf'},label: 'gregf'}]}]
const newData = data.map(d => {
let result = {};
result.title = d.tags.find(tag => tag.type === 2).label;
result.data = d.tags.filter(tag => tag.type === 2);
return result;
});
console.log(newData);
P.S.:此代码段考虑到可以将多个 tagType 包含到数据数组中,并且第一个找到的将用作标题。 如果这不是您想要的,那么问题应该更清楚。
,我怀疑您正在寻找带有 groupBy property path 的 iteratee shorthand:
import { groupBy } from 'underscore';
groupBy(data,['tags',1,'label']);
// { thisOne: [Object,Object],// anotherOne: [Object]
// }
这会生成一个以标签为键、以组为值的对象。从这里开始,可以很容易地以您的问题的示例输出的确切形状获得它,例如使用 chain 和 map:
import { chain } from 'underscore';
chain(data)
.groupBy(['tags','label'])
.map((data,title) => ({data,title}))
.value();
// [ { title: 'thisOne',data: [Object,Object] },// { title: 'anotherOne',data: [Object] }
// ]