为了账号安全,请及时绑定邮箱和手机立即绑定

对象数组优化

对象数组优化

慕哥6287543 2021-12-02 19:33:07
下面我有一组从服务器接收的数据。我需要从数据中找到哪个“id”连接到哪个“apip”我有下面的工作代码。我的问题是......我是否以最有效的方式做到了这一点?我的策略如下:第 1 步 - 捕获所有的 apip 将它们保存到一个数组中第 2 步 - 清除所有重复的 apip第 3 步 - for 循环比较 apip 是否匹配 apip- 如果真的捕获该 ID-else 将该 ID 存储在 apip 2 上(我知道我只有 2 个可能的 APIP)第 4 步 - 清除任何重复的“id”这是最好的方法吗?
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

要找到uniqs 中的一个(我们称之为 s oneApip),只需检查s的第一个元素data- 您不需要 Set 或迭代所有这些元素。然后迭代dataand,对于每个元素,添加到一个或另一个集合,具体取决于它是否apip匹配oneApip:


var data=[{time:"1571965891.8420029",rssi:"30",id:"123456789",apip:"172.172.172.172.1"},{time:"1571971066.8283374",rssi:"30",id:"100",apip:"172.172.172.172.2"},{time:"1571965476.4821894",rssi:"30",id:"123456789",apip:"172.172.172.172.2"},{time:"1571965894.140705",rssi:"30",id:"123456789",apip:"172.172.172.172.2"},{time:"1571965893.1654441",rssi:"30",id:"123456789",apip:"172.172.172.172.1"},{time:"1571970952.7499905",rssi:"30",id:"9999999",apip:"172.172.172.172.1"},{time:"1571965888.1338017",rssi:"30",id:"123456789",apip:"172.172.172.172.2"},{time:"1571970925.342063",rssi:"30",id:"66666",apip:"172.172.172.172.1"},{time:"1571965890.158157",rssi:"30",id:"123456789",apip:"172.172.172.172.1"}];


const oneApip = data[0].apip;

const set1 = new Set();

const set2 = new Set();

for (const { apip, id } of data) {

  (apip === oneApip ? set1 : set2).add(id);

}

const uniq1 = [...set1];

const uniq2 = [...set2];

console.log(uniq1);

console.log(uniq2);


更一般地,对于任意数量的apips,创建一个由 索引的对象apip,其值为集合:


var data=[{time:"1571965891.8420029",rssi:"30",id:"123456789",apip:"172.172.172.172.1"},{time:"1571971066.8283374",rssi:"30",id:"100",apip:"172.172.172.172.2"},{time:"1571965476.4821894",rssi:"30",id:"123456789",apip:"172.172.172.172.2"},{time:"1571965894.140705",rssi:"30",id:"123456789",apip:"172.172.172.172.2"},{time:"1571965893.1654441",rssi:"30",id:"123456789",apip:"172.172.172.172.1"},{time:"1571970952.7499905",rssi:"30",id:"9999999",apip:"172.172.172.172.1"},{time:"1571965888.1338017",rssi:"30",id:"123456789",apip:"172.172.172.172.2"},{time:"1571970925.342063",rssi:"30",id:"66666",apip:"172.172.172.172.1"},{time:"1571965890.158157",rssi:"30",id:"123456789",apip:"172.172.172.172.1"}];


const grouped = {};

for (const { apip, id } of data) {

  if (!grouped[apip]) {

    grouped[apip] = new Set();

  }

  grouped[apip].add(id);

}

const arrs = Object.entries(grouped)

  .map(([apip, set]) => [apip, [...set]]);

console.log(arrs);


查看完整回答
反对 回复 2021-12-02
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

你可以做:


const data = [{"time": "1571965891.8420029","rssi": "30","id": "123456789","apip": "172.172.172.172.1"}, {"time": "1571971066.8283374","rssi": "30","id": "100","apip": "172.172.172.172.2"}, {"time": "1571965476.4821894","rssi": "30","id": "123456789","apip": "172.172.172.172.2"}, {"time": "1571965894.140705","rssi": "30","id": "123456789","apip": "172.172.172.172.2"}, {"time": "1571965893.1654441","rssi": "30","id": "123456789","apip": "172.172.172.172.1"}, {"time": "1571970952.7499905","rssi": "30","id": "9999999","apip": "172.172.172.172.1"}, {"time": "1571965888.1338017","rssi": "30","id": "123456789","apip": "172.172.172.172.2"}, {"time": "1571970925.342063","rssi": "30","id": "66666","apip": "172.172.172.172.1"}, {"time": "1571965890.158157","rssi": "30","id": "123456789","apip": "172.172.172.172.1"}]


const sets = data.reduce(

    (a, { apip, id }, _, arr) => ((apip === arr[0].apip ? a.one : a.two).add(id), a),

    { 

      one: new Set(), 

      two: new Set() 

    }

  ),

  result = {

    uniqDataFromAP1: [...sets.one],

    uniqDataFromAP2: [...sets.two]

  }


console.log(result)

.as-console-wrapper {max-height: 100% !important;top: 0;}


查看完整回答
反对 回复 2021-12-02
  • 2 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信