javascript - 如何在 JavaScript 中根据数组中对象的属性对数组进行排序

标签 javascript arrays node.js sorting object

我有一个数组,其中包含以下格式的许多对象:

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/

相关文章:

javascript - 搜索嵌套对象并返回对第一个找到的函数的引用,未知大小,未知名称

javascript - 使用 require 时的点斜线和目录级别

javascript - 如何使用 puppeteer 从网站获取所有链接

javascript - UIKit v3 选项卡不起作用

javascript - DateTimePicker - 添加给定时间段内的天数

c++ - 将代码转换为数组并显示

javascript - 变量在 youtube 搜索 api 函数之外未定义

javascript - 去中心化应用程序如何通过 walletconnect 处理注销

c# - 修剪数组中的所有字符串

arrays - 如何使用应用程序加载器通过 xcode 7.3 上传 swift 项目