在AngularJs中生成具有常见/不常见元素的阵列



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

  • 名称

  • PresentData

  • pastdata

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

presentData是一个包含更多数据的数值的字符串,并且所有站点都存在。

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

我的目标是创建一个具有初始数组的长度的数组,AS值AS值也具有pastDataname,并且对于不具有CC_7或""的数组。

有此输入:

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"]

我尝试了多种方式,但是没有成功,我想最接近解决方案的方法如下:

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

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

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

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

如果我正确地得到你,这就是你想要的:

var desiredArray = [];
Sites.forEach(function(element){
    if (element.pastData.length === 0) desiredArray.push(null);
    else desiredArray.push(element.name);
});

它基本上迭代了Sites,对于每个元素(这是您的obj,带有数据),它将名称或null放在另一个数组中。由于数据源是数组,因此保留了名称顺序。

我更喜欢它而不是滤镜 地图,因为它更容易阅读。

映射数组应有助于解决您面临的问题。当您仅考虑pastdata数组长度时,为什么要使用过滤器进行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);

最新更新