Javascript:根据属性值将对象数组拆分为具有动态名称的单独数组

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(),但是没有找到解决方案。

JO3*_*D3V 5

您可以使用轻松实现所需的结果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)