如何获取一个属性的唯一计数并设置为另一个属性

时间:2016-07-03 16:02:57

标签: javascript arrays object data-structures

我以下列形式获取对象数据。

data :  Object {ELEMENTID: "ELE1", ELEMENTNAME: "EME1", ELE: "Yes"}
    Object {ELEMENTID: "ELE1", ELEMENTNAME: "EME1", ELE: "Yes"}
    Object {ELEMENTID: "ELE2", ELEMENTNAME: "EME1", ELE: "Yes"}
    Object {ELEMENTID: "ELE3", ELEMENTNAME: "EME1", ELE: "Yes"}
    Object {ELEMENTID: "ELE1", ELEMENTNAME: "EME1", ELE: "Yes"}
    Object {ELEMENTID: "ELE3", ELEMENTNAME: "EME1", ELE: "Yes"}
    Object {ELEMENTID: "ELE3", ELEMENTNAME: "EME1", ELE: "Yes"}
    Object {ELEMENTID: "ELE2", ELEMENTNAME: "EME1", ELE: "Yes"}

现在我想将我的数据更改为以下形式。

data : object {ELEMENTID: "ELE1: ELEMENTNAME: 3, ELE : "Yes"}
       object {ELEMENTID: "ELE2: ELEMENTNAME: 2, ELE : "Yes"}
       object {ELEMENTID: "ELE3: ELEMENTNAME: 3, ELE : "Yes"}

我正在使用STU的唯一计数并放入SUB和STU中仅放置唯一值。我能够获取STU的唯一计数但是如何在SUB

中放置属性

任何人都可以帮我解决问题。

2 个答案:

答案 0 :(得分:1)

您可以使用forEach循环和emoji可选参数执行此操作。

thisArg

答案 1 :(得分:1)

如果您需要修改/更改输入数组 - 请考虑使用Array.sortArray.splice函数的以下方法:

var arr =  [{"STU":"Study1","SUB":"Subject1","EXL":"Yes"},{"STU":"Study1","SUB":"Subject1","EXL":"Yes"},{"STU":"Study2","SUB":"Subject1","EXL":"Yes"},{"STU":"Study3","SUB":"Subject1","EXL":"Yes"},{"STU":"Study1","SUB":"Subject1","EXL":"Yes"},{"STU":"Study3","SUB":"Subject1","EXL":"Yes"},{"STU":"Study3","SUB":"Subject1","EXL":"Yes"},{"STU":"Study2","SUB":"Subject1","EXL":"Yes"}];

arr.sort((a,b) => a.STU.localeCompare(b.STU));
for (var i = 0; i < arr.length; i++) {
    if (i === 0 || arr[i].STU !== arr[i-1].STU) {
        arr[i].SUB = 1;
    } else {
        arr[i-1].SUB++;
        arr.splice(i, 1);
        --i;
    }
}
console.log(JSON.stringify(arr, 0, 4));

输出:

[
    {
        "STU": "Study1",
        "SUB": 3,
        "EXL": "Yes"
    },
    {
        "STU": "Study2",
        "SUB": 2,
        "EXL": "Yes"
    },
    {
        "STU": "Study3",
        "SUB": 3,
        "EXL": "Yes"
    }
]