javascript - 计算数组 B 中主数组 A 中出现的次数

标签 javascript arrays

我想获取数组 A 中 B 中项目的计数,并返回包含计数元素的数组 C。

数组A是:

arrA = [{id:1,name:"Nairobi"},{id:2,name:"New Delhi"},{id:3,name:"Singapore"},{id:4,name:"London"}]

数组 B 是:

arrB = [{id:1,id_fk:1,name:"Steve"},{id:2,id_fk:1,name:"John"},{id:3,id_fk:2,name:"Stella"},{id:4,id_fk:3,name:"Kemi"},{id:5,id_fk:3,name:"Kelly"},{id:6,id_fk:4,name:"James"},{id:7,id_fk:4,name:"Marley"},{id:8,id_fk:4,name:"Oliver"}]

使用数组 B 中的 id_fk 作为数组 A 中 id“外键”,预期输出为

[2,1,2,3]

我的实现代码是

for (let arrayA of arrA){ 
let count = arrB.filter(a => 
{return a.id_fk === arrayA.id}).length;
}

最佳答案

您可以采用 Map 并按所需顺序获取 id 作为键,并使用 id_fk 减少第二个数组以对项目进行计数。作为结果,获取 map 值的数组。

此方法使用单个循环获取 id 作为键,并使用另一个循环进行计数。

var arrA = [{ id: 1, name: "Nairobi" }, { id: 2, name: "New Delhi" }, { id: 3, name: "Singapore" }, { id: 4, name: "London" }],
    arrB = [{ id: 1, id_fk: 1, name: "Steve" }, { id: 2, id_fk: 1, name: "John" }, { id: 3, id_fk: 2, name: "Stella" }, { id: 4, id_fk: 3, name: "Kemi" }, { id: 5, id_fk: 3, name: "Kelly" }, { id: 6, id_fk: 4, name: "James" }, { id: 7, id_fk: 4, name: "Marley" }, { id: 8, id_fk: 4, name: "Oliver" }],
    result = Array.from(arrB
        .reduce(
            (m, { id_fk }) => m.set(id_fk, m.get(id_fk) + 1),
            new Map(arrA.map(({ id }) => [id, 0]))
        )
        .values()
    );

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

具有哈希表的结果和具有计数属性的新对象。

var arrA = [{ id: 1, name: "Nairobi" }, { id: 2, name: "New Delhi" }, { id: 3, name: "Singapore" }, { id: 4, name: "London" }],
    arrB = [{ id: 1, id_fk: 1, name: "Steve" }, { id: 2, id_fk: 1, name: "John" }, { id: 3, id_fk: 2, name: "Stella" }, { id: 4, id_fk: 3, name: "Kemi" }, { id: 5, id_fk: 3, name: "Kelly" }, { id: 6, id_fk: 4, name: "James" }, { id: 7, id_fk: 4, name: "Marley" }, { id: 8, id_fk: 4, name: "Oliver" }],
    hash = {},
    result = arrA.map(o => Object.assign(hash[o.id] = {}, o, { count: 0 }));

arrB.forEach(({ id_fk }) => hash[id_fk].count++);

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

关于javascript - 计算数组 B 中主数组 A 中出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58224746/

相关文章:

javascript - JS按三种排序方式对数组进行排序

javascript - 选择列中给出相应单元格值的单元格

c# - 类间访问List\Array

javascript - 根据 NODE_ENV 设置 gulp 任务

javascript - 与 jQuery 动态加载的 iFrame 交互

javascript - 从与字符串混合的数组中提取数字 - Javascript

java - 如果我必须对大量数据进行二分查找,我应该使用哪种数据类型?

c++ - 给定数字列表有多少种方法可以得到 21?如何获得所有可能的数字组合?

javascript - 使用 JQuery 仅显示小数点后 2 位

javascript - 无法打包 Electron 应用程序