Gar*_*ero 2 javascript arrays object slice
我有一个包含对象的数组。现在,我想将数组切片为仅包含与某个属性值匹配的那些对象的新数组。
理想情况下,应该动态创建新的数组名称。
原始数组如下所示:
specificSlotButtonArray = [
{slotStarttime:"06:00:00", slotTimespan:1},
{slotStarttime:"09:00:00", slotTimespan:1},
{slotStarttime:"12:00:00", slotTimespan:2},
{slotStarttime:"15:00:00", slotTimespan:2},
{slotStarttime:"18:00:00", slotTimespan:3}
];
Run Code Online (Sandbox Code Playgroud)
新数组应如下所示:
timespan1 = [
{slotStarttime:"06:00:00", slotTimespan:1},
{slotStarttime:"09:00:00", slotTimespan:1}
]
timespan2 = [
{slotStarttime:"12:00:00", slotTimespan:2},
{slotStarttime:"15:00:00", slotTimespan:2}
]
timespan3 = [
{slotStarttime:"18:00:00", slotTimespan:3}
]
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想避免IE和其他一些旧版浏览器不支持的javascript语法/函数。
我已经尝试使用reduce()和slice(),但是没有找到解决方案。
您可以使用轻松实现所需的结果reduce,因为您可以使用来生成一个对象reduce,这是您如何做到的示例。
如您所见,它将检查对象上的相关属性是否不为null,如果为null,则将其设置为空数组,执行此检查后,可以将相关值简单地推入数组,就像所以。
var array = [{
slotStarttime: "06:00:00",
slotTimespan: 1
},
{
slotStarttime: "09:00:00",
slotTimespan: 1
},
{
slotStarttime: "12:00:00",
slotTimespan: 2
},
{
slotStarttime: "15:00:00",
slotTimespan: 2
},
{
slotStarttime: "18:00:00",
slotTimespan: 3
}
];
var newObject = array.reduce(function(obj, value) {
var key = `timespan${value.slotTimespan}`;
if (obj[key] == null) obj[key] = [];
obj[key].push(value);
return obj;
}, {});
console.log(newObject);Run Code Online (Sandbox Code Playgroud)