在AngularJS中生成具有公共/非公共元素的数组

时间:2017-12-14 13:34:43

标签: javascript arrays angularjs

我有一个名为Sites的数组。数组的每个元素都有3个对象:

  • 名称

  • presentData

  • pastData

name由单个字符串元素组成。

presentData是一个字符串,包含更多数据的数值,并且适用于所有网站。

pastData包含相同但有些网站没有数据,它只是一个空数组[]

我的目标是创建一个具有初始数组长度的数组,其数组name的数值为pastData,并且为null或{{ 1}}用于那些没有的。

有了这个输入:

""

输出应为:Sites = [ {name: "name1", presentData: [423, 23, 11, 54, 55], pastData: [423, 123, 53, 11, 6] }, {name: "name2", presentData: [423, 23, 11, 54, 55], pastData: [423, 123, 53, 11, 6] }, {name: "name3", presentData: [423, 23, 11, 54, 55], pastData: [423, 123, 53, 11, 6] }, {name: "name4", presentData: [423, 23, 11, 54, 55], pastData: [] }, {name: "name5", presentData: [423, 23, 11, 54, 55], pastData: [] }, {name: "name6", presentData: [423, 23, 11, 54, 55], pastData: [423, 123, 53, 11, 6] }, ];

我尝试了很多方法,但没有成功,我想最接近解决方案的是这样:

["name1", "name2", "name3", null, null, "name6"]

有什么想法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

如果我理解正确,你可以尝试一下:

Sites.filter(s => s.presentData.length).map(s => s.pastData.length ? s.name : null)

答案 1 :(得分:0)

如果我正确地告诉你这就是你想要的:

Sites

它基本上迭代了Producer并且对于每个元素(你的obj与数据),它在另一个数组中放置一个名称或null。由于数据源是数组,因此保留了名称的顺序。

我更喜欢过滤器+地图,因为它更容易阅读。

答案 2 :(得分:0)

映射数组应该有助于解决您面临的问题。当您只考虑pastData数组长度时,为什么要使用filter for presentData。



'use strict';
   
   let Sites = [
    {name: "name1",
    presentData: [423, 23, 11, 54, 55],
    pastData: [423, 123, 53, 11, 6]
    },
    {name: "name2",
    presentData: [423, 23, 11, 54, 55],
    pastData: [423, 123, 53, 11, 6]
    },
    {name: "name3",
    presentData: [423, 23, 11, 54, 55],
    pastData: [423, 123, 53, 11, 6]
    },
    {name: "name4",
    presentData: [423, 23, 11, 54, 55],
    pastData: []
    },
    {name: "name5",
    presentData: [423, 23, 11, 54, 55],
    pastData: []
    },
    {name: "name6",
    presentData: [423, 23, 11, 54, 55],
    pastData: [423, 123, 53, 11, 6]
    },  
];

let result = Sites.map((a) => a.pastData.length < 1 ? a.name = null: a.name );
console.log(result);
&#13;
&#13;
&#13;