我有一个名为Sites
的数组。数组的每个元素都有3个对象:
名称
presentData
pastData
name
由单个字符串元素组成。
presentData
是一个字符串,包含更多数据的数值,并且适用于所有网站。
pastData
包含相同但有些网站没有数据,它只是一个空数组[]
我的目标是创建一个具有初始数组长度的数组,其数组name
的数值为pastData
,并且为null
或{{ 1}}用于那些没有的。
有了这个输入:
""
输出应为:Sites = [
{name: "name1",
presentData: [423, 23, 11, 54, 55],
pastData: [423, 123, 53, 11, 6]
},
{name: "name2",
presentData: [423, 23, 11, 54, 55],
pastData: [423, 123, 53, 11, 6]
},
{name: "name3",
presentData: [423, 23, 11, 54, 55],
pastData: [423, 123, 53, 11, 6]
},
{name: "name4",
presentData: [423, 23, 11, 54, 55],
pastData: []
},
{name: "name5",
presentData: [423, 23, 11, 54, 55],
pastData: []
},
{name: "name6",
presentData: [423, 23, 11, 54, 55],
pastData: [423, 123, 53, 11, 6]
},
];
我尝试了很多方法,但没有成功,我想最接近解决方案的是这样:
["name1", "name2", "name3", null, null, "name6"]
有什么想法可以解决这个问题吗?
答案 0 :(得分:1)
如果我理解正确,你可以尝试一下:
Sites.filter(s => s.presentData.length).map(s => s.pastData.length ? s.name : null)
答案 1 :(得分:0)
如果我正确地告诉你这就是你想要的:
Sites
它基本上迭代了Producer
并且对于每个元素(你的obj与数据),它在另一个数组中放置一个名称或null。由于数据源是数组,因此保留了名称的顺序。
我更喜欢过滤器+地图,因为它更容易阅读。
答案 2 :(得分:0)
映射数组应该有助于解决您面临的问题。当您只考虑pastData数组长度时,为什么要使用filter for presentData。
'use strict';
let Sites = [
{name: "name1",
presentData: [423, 23, 11, 54, 55],
pastData: [423, 123, 53, 11, 6]
},
{name: "name2",
presentData: [423, 23, 11, 54, 55],
pastData: [423, 123, 53, 11, 6]
},
{name: "name3",
presentData: [423, 23, 11, 54, 55],
pastData: [423, 123, 53, 11, 6]
},
{name: "name4",
presentData: [423, 23, 11, 54, 55],
pastData: []
},
{name: "name5",
presentData: [423, 23, 11, 54, 55],
pastData: []
},
{name: "name6",
presentData: [423, 23, 11, 54, 55],
pastData: [423, 123, 53, 11, 6]
},
];
let result = Sites.map((a) => a.pastData.length < 1 ? a.name = null: a.name );
console.log(result);
&#13;