我有一个数组,其中包含以下格式的许多对象:
var data = [
{
vs: "23434",
ip: "129.23.321.5"
},
{
vs: "23454",
ip: "129.23.321.6"
},
{
vs: "23434",
ip: "129.23.321.8"
}
];
现在我想以一种方式对它们进行排序,其中有一个数组保存以下格式的对象:
var dataFinal = [
{
vs: "23434",
ip: ["129.23.321.5", "129.23.321.8"]
}
{
vs: "98647",
ip: ["129.23.321.6"]
}
];
所以基本上,数据变量中将有多个对象,其中可能有多个具有相同 vs 的 ip。我想以一种数组将有多个对象的方式对它们进行排序,每个对象对应一个 vs,但是ip 将是另一个数组,其中包含该 vs 的所有 ip。
在 JavaScript 中执行此操作的最佳方法是什么?
最佳答案
我认为这是一个编程技术问题,与特定语言无关。
Javascript 不提供“ native ”方式来完成此类任务。你在评论中描述的方式完全没问题。如果您发现自己经常处理此类任务,您可以使用一些第三方库,例如 underscore以减少生物板代码。
解决这个问题的下划线方法:
function mergeVsUseUnderscore(data) {
var dataFinal = [],
vsInFinal;
_.each(data, function(item) {
vsInFinal = _.find(dataFinal, function(itemFinal) {
return itemFinal.vs === item.vs;
});
if(vsInFinal) {
vsInFinal.ip.push(item.ip);
} else {
dataFinal.push({
vs: item.vs,
ip: [item.ip]
})
}
});
return dataFinal;
}
还有一件事要提,只需使用 _.groupBy(data, 'vs')
就会产生:
{
'23434': [
{ vs: '23434', ip: '129.23.321.5' },
{ vs: '23434', ip: '129.23.321.8' }
],
'23454': [ { vs: '23454', ip: '129.23.321.6' } ]
}
关于javascript - 如何在 JavaScript 中根据数组中对象的属性对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24236302/