javascript - 将重复项合并到数组中

标签 javascript angularjs

我有一个如下所示的数组

[
{"st":"10:30,22:30","day":1},
{"st":"9:30,20:30","day":3},
{"st":"9:30,20:30","day":4},
{"st":"11:0,23:30","day":7},
{"st":"11:0,23:30","day":6},
{"st":"8:0,23:0","day":2},
{"st":"8:0,23:0","day":5}
]

我想像下面这样转换它

[
 {"st":"10:30,22:30","day":[1]},
 {"st":"9:30,20:30","day":[3,4]},
 {"st":"11:0,23:30","day":[7,6]},
 {"st":"8:0,23:0","day":[2,5]}
]

根据重复的“st”值,我想合并那些相应的日期。 我尝试了很多方法但我无法做到。有人可以帮我吗?提前致谢。

最佳答案

一种方法如下:

var yourArray = [
{"st":"10:30,22:30","day":1},
{"st":"9:30,20:30","day":3},
{"st":"9:30,20:30","day":4},
{"st":"11:0,23:30","day":7},
{"st":"11:0,23:30","day":6},
{"st":"8:0,23:0","day":2},
{"st":"8:0,23:0","day":5}
];

var newArray =
Array.from(new Set(yourArray.map(elem => elem.st))) // get unique st's
    .map(elem => ({
        st: elem,
        day: yourArray.filter(el => el.st === elem).map(el => el.day) // get array of days
}));

console.log(newArray);

请注意,这使用了 ES6 功能,您需要使用转译器(例如 Babel)才能在不兼容 ES6 的浏览器中使用它。

资源

关于javascript - 将重复项合并到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38197827/

相关文章:

javascript - 在 codeIgniter 中使用单个表进行动态下拉

javascript - 使用 JavaScript 创建特定计算器

html - 垂直 MD 工具栏

rest - 轻松 POST 响应的“最佳”实践

javascript - QUnit Javascript 单元测试显示断言号而不是测试号

javascript - 使用 jQuery Isotope 了解 setTimeout() 和回调

javascript - 跨浏览器选择文本的方式

javascript - 路由变更时的认证

javascript - 如何使用自定义指令作为类在 AngularJS 中使用日期选择器?

javascript - 如何构建 Angularjs/Leaflet/Node.js 应用程序