用于数组循环的Typescript / Javascript,将键的值作为值1推入新数组作为键-如果已经存在,则递增

时间:2018-08-14 16:44:39

标签: javascript arrays json angular typescript

目的是使一个数组具有另一个数组中特定键的所有唯一值。这些唯一值(现在是新数组中的键)的值将是它们在原始数组中出现的次数。

到目前为止,这是我的代码:

for (let i = 0; i < data.length; i++) {


           let theStupidKey = data[i].DeliveryStatus;

           if (
             this.differentValuesOfStatus.indexOf(theStupidKey) == "-1"
           ) {
             this.differentValuesOfStatus.push(theStupidKey: 1);
             // this.differentValuesOfStatus[theStupidKey].push(theStupidKey = 1);
           }
           else {
             this.differentValuesOfStatus[theStupidKey] = 1
           }
        }
        console.log(this.differentValuesOfStatus);
      };

但是语法是错误的,我尝试了一切我想使它起作用的方法。

基本上,我正在遍历数组。

如果第二个数组中不存在“ deliverystatus”键的值,则将其添加为“ 1”。

如果该号码已经存在,我想为其添加另一个号码。

2 个答案:

答案 0 :(得分:1)

一个数组只能保存一个值列表。如果要存储键和相应的值,则应使用地图:

class Test {
  differentValuesOfStatus: Map<string, number>;

  test(data: {DeliveryStatus: string}[]) {
    this.differentValuesOfStatus = new Map<string, number>();
    for (let i = 0; i < data.length; i++) {
      let theStupidKey = data[i].DeliveryStatus;

      let value = this.differentValuesOfStatus.get(theStupidKey);
      this.differentValuesOfStatus.set(theStupidKey,
        (value === undefined ? 0 : value) + 1);
    }
    console.log(this.differentValuesOfStatus);
  }
}

let t = new Test();
t.test([
  { DeliveryStatus: "Accepted" },
  { DeliveryStatus: "Rejected" },
  { DeliveryStatus: "Accepted" }
]);

答案 1 :(得分:0)

我认为您可以创建一个对象,将您的状态名称作为Key,并将出现次数作为值。这是实现此目的的代码。

for (let i = 0; i < data.length; i++)
{
    let theStupidKey = data[i].DeliveryStatus;

    if (!this.differentValuesOfStatus.hasOwnProperty(theStupidKey)) {
        this.differentValuesOfStatus[theStupidKey] = 0;
    }
    this.differentValuesOfStatus[theStupidKey] = this.differentValuesOfStatus[theStupidKey] + 1;
}
console.log(this.differentValuesOfStatus);

您将获得像这样的资源库。

{Status1: 2, Status2: 3, Status3: 1, Status4: 3}

但是,如果您想要一个数组,则可以执行以下操作,

let newArray = [];
for (var key in this.differentValuesOfStatus) {
    newArray.push({ "Status": key, "Occurence": this.differentValuesOfStatus[key] });
}
console.log(newArray);

输出将为

[{status: "Status1", Occurence: 2},
{status: "Status2", Occurence: 3},
{status: "Status3", Occurence: 1},
{status: "Status4", Occurence: 3}]