我有一个称为 Sites
的数组。数组的每个元素都有3个对象:
-
名称
-
PresentData
-
pastdata
name
由单个字符串元素形成。
presentData
是一个包含更多数据的数值的字符串,并且所有站点都存在。
pastData
包含相同但没有数据的站点,它只是一个空数组[]
我的目标是创建一个具有初始数组的长度的数组,AS值AS值也具有pastData
的name
,并且对于不具有CC_7或""
的数组。
有此输入:
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"]
我尝试了多种方式,但是没有成功,我想最接近解决方案的方法如下:
Sites.filter(s => s.presentData.length).map(s => s.name).filter(s => s.pastData)
有什么想法解决这个问题?
如果我正确理解,可以尝试一下:
Sites.filter(s => s.presentData.length).map(s => s.pastData.length ? s.name : null)
如果我正确地得到你,这就是你想要的:
var desiredArray = [];
Sites.forEach(function(element){
if (element.pastData.length === 0) desiredArray.push(null);
else desiredArray.push(element.name);
});
它基本上迭代了Sites
,对于每个元素(这是您的obj,带有数据),它将名称或null放在另一个数组中。由于数据源是数组,因此保留了名称顺序。
我更喜欢它而不是滤镜 地图,因为它更容易阅读。
映射数组应有助于解决您面临的问题。当您仅考虑pastdata数组长度时,为什么要使用过滤器进行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);