在一个阵列下垂重复阵列

2023-09-11 02:21:44 作者:滑过浪潮ξ

请求某个用户的照片后,我结束了一个这样的数组:

After requesting some user pictures, I end up with an array like this:

[
    { label: "portrait", owner: "Jon" },
    { label: "house", owner: "Jim" },
    { label: "portrait", owner: "Jim" },
    { label: "portrait", owner: "Jane" },
    { label: "cat", owner: "Jane" }
]

我要强调项目的标签出现多次数组(这里:肖像)的

I need to highlight items whose label occurs multiple times in the array (here: "portrait").

理想情况下,会为一个标志(A)为数组中的项目,其标签再次发生的之后的,而另一个标志(B )为最终发生(即双方Jon的和吉姆的肖像被标记A,而简氏得到B)。

Ideally, there'd be one flag (A) for items whose label occurs again later in the array, and another flag (B) for the final occurrence (i.e. both Jon's and Jim's portraits are flagged A, while Jane's gets B).

任何帮助将是很大的AP preciated!

Any help would be greatly appreciated!

推荐答案

我不知道你想要做什么,但也许你只需要汇总数据?

I'm not sure what you're trying to do, but maybe you just need to aggregate the data?

var data = [
    { name: "portrait", owner: "Jon" },
    { name: "house", owner: "Jim" },
    { name: "portrait", owner: "Jim" },
    { name: "portrait", owner: "Jane" },
    { name: "cat", owner: "Jane" }
];

var byName = {};

for (var i = 0, l = data.length; i < l; ++i) {
    if (!byName[data[i].name]){
        byName[data[i].name] = [];
    }
    byName[data[i].name].push(data[i].owner);
}

// byName == {portrait: ["Jon", "Jim", "Jane"], house: ["Jim"], cat: ["Jane"]}

var byOwner = {};

for (var i = 0, l = data.length; i < l; ++i) {
    if (!byOwner[data[i].owner]) {
        byOwner[data[i].owner] = [];
    }
    byOwner[data[i].owner].push(data[i].name);
}

或者,也许你喜欢这个更好的:

Or maybe you like this better:

var data = [
    { name: "portrait", owner: "Jon" },
    { name: "house", owner: "Jim" },
    { name: "portrait", owner: "Jim" },
    { name: "portrait", owner: "Jane" },
    { name: "cat", owner: "Jane" }
];

var byName = [];

for (var i = 0, l = data.length; i < l; ++i) {
    var done = false;
    for (var j = 0, k = data.length; j < k; ++j) {
        if (byName[j] && byName[j].name == data[i].name) {
            byName[j].data.push(data[i].owner);
            done = true;
        }
    }
    if (!done) {
        byName.push({name: data[i].name, data: [data[i].owner]});
    }
}

/*
byName == [
    {name: "portrait", data: ["Jon", "Jim", "Jane"]},
    {name: "house", data: ["Jim"]},
    {name: "cat", data: ["Jane"]}
] */

由于张贴随机code是乐趣,你懂的!

Because posting random code is fun and you know it!