繁体   English   中英

如何使用 node.js 从 json 数组中获取新的数字列表

[英]How do I get just a new list of numbers from a json array using node.js

鉴于此 json object

{
    "contacts": [
        {
            "name": "Jane doe",
            "numbers": [
                {
                    "number": "07123456789"
                }
            ],
            "groups": [
                {
                    "group": "Everyone"
                },
                {
                    "group": "Exec"
                }
            ]
        }, 
        {
            "name": "John Smith",
            "numbers": [
                {
                    "number": "07987654321"
                }
            ],
            "groups": [
                {
                    "group": "Everyone"
                }
            ]
        }
    ]
}

如何返回组等于给定值的新电话号码数组。

因此,例如,我希望有一个“07123456789”数组,其中联系人组=“Exec”

此外,在 Group = "Everyone" 的地方,我希望有 2 个项目的数组:"07123456789" 和 "07987654321"

我试过了:

 var data = require('../data/data.json')

 var peopleInGroup = data.contacts.filter(function (value) {
     value.groups.filter(function (type) {
         return type.group === recipients[i];
     })
 });

收件人是一组“Everyone”、“Exec”、“Overseas”组

在这篇文章之后,我稍微更改了第二个最受好评的答案代码,使其具有:

const getContactsByGroupName = (groupName) => {
    return a.contacts
        .filter((element) =>
            element.groups.some((subElement) => subElement.group === groupName))
        .map(element => {
            return Object.assign({}, element, { group: element.groups.filter(subElement => subElement.group === groupName) });
        });
}

console.log(getContactsByGroupName("Exec"))

这应该可以解决问题。 这里的变量a当然是你的 json object 名称

只需使用 Array 原型方法,以下内容就可以完成您想要的操作:

function filterByGroup(obj, val) {

    const objArray = obj.contacts.filter((innerObj, index, array) => {
            a = innerObj.groups.filter(group => group.group === val)
            return a.length > 0 ? innerObj : false;
    });

    return (objArray.map(obj => obj.numbers.map( number =>number.number))).flat();

}

然后你可以调用它:

filterByGroup(obj, 'Exec')

其中obj是您的初始对象!

这是一段创建 JSON 的代码,它具有三组数字:

final_data = {"Everyone": [], "Exec": [], "Overseas": [] }
data.contacts.forEach( (contact) => {
    contact.groups.forEach(group => {
        final_data[group.group].push(contact.numbers);
    })
})

console.log(final_data);

您可以简单地运行每个联系人条目并生成一个输出对象,其中包含每个组的数字 arrays。 这是一个例子。

 var input_json = { "contacts": [ { "name": "Jane doe", "numbers": [ { "number": "07123456789" } ], "groups": [ { "group": "Everyone" }, { "group": "Exec" } ] }, { "name": "John Smith", "numbers": [ { "number": "07987654321" } ], "groups": [ { "group": "Everyone" } ] } ] } //define the output objects that will contain the number-arrays by group-key var output = {} //run trough every contact for (let i in input_json.contacts) //run trough every group of current contact for (let j in input_json.contacts[i].groups) //run trough every contact-number for current contact-group for (let k in input_json.contacts[i].numbers) //if group-key already exists in output -> push number in array if (output[input_json.contacts[i].groups[j].group]) output[input_json.contacts[i].groups[j].group].push (input_json.contacts[i].numbers[k].number) //if group-key does not exist -> add new key-array pair else output[input_json.contacts[i].groups[j].group] = [input_json.contacts[i].numbers[k].number] //write output as JSON to document document.write (JSON.stringify (output))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM