我有一个这样构建的数组:
test[0].age = "15-24"; test[0].value= "5";
test[1].age = "45-54"; test[1].value= "10";
等
我有另一个这样构建的数组:
ageRange[0] = "1-14";
ageRange[1] = "15-24";
等
ageRange具有所有年龄范围 - 并且测试数组仅包含其中一些。
我想重建测试数组以包含ageRange数组的所有年龄,如果它们不在数组中,则为它们赋值0.这样做的最佳方法是什么?此外 - 他们需要顺序添加。
答案 0 :(得分:1)
您可以使用新范围迭代数组,并在检查左侧部分时迭代test
数组。如果左侧部分不相等,则在实际位置将新对象插入测试数组。
var test = [{ age: "15-24", value: "5" }, { age: "45-54", value: "10" }],
ageRange = ["1-14", "15-24"],
i = 0;
ageRange.forEach(function (a) {
function getLeft(s) { return +s.split('-')[0]; }
var left = getLeft(a);
while (getLeft(test[i].age) < left) {
i++;
}
getLeft(test[i].age) === left || test.splice(i, 0, { age: a, value: '0' });
});
console.log(test);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:1)
var AgeArray=["15-24","25-30","30-35","40-45","45-50","55-60"];
var NewArray=[{ age: "15-24", value: "5" }, { age: "25-30", value: "10" }, { age: "45-50", value: "15" }, { age: "55-60", value: "20" }];
$.each(AgeArray,function(i,val){
var filtered = $(NewArray).filter(function(){
return this.age == val;
});
if(filtered.length == 0)
{
var newobj={};newobj.age=val;newobj.value=0;NewArray.push(newobj)}
});
$('#result').text(JSON.stringify(NewArray));
输出
https://jsfiddle.net/wy18u0zu/2/
<强> JSON.stringify(NewArray)强>
“[{” 年龄 “:” 15-24" , “值”: “5”},{ “年龄”: “25-30”, “值”: “10”},{ “年龄”: “45-50”, “值”: “15”},{ “年龄”: “55-60”, “值”: “20”},{ “年龄”: “30-35”, “值”: 0},{ “年龄”: “40-45”, “值”:0}]“
答案 2 :(得分:0)
ageRange.forEach((age, i) => {
let agePresent = test.filter((obj) => obj.age === age).length;
if (!agePresent) {
var objt = ({val : 0, age : age});
test.splice(i,0,objt);
}
});
我最终获得了一些帮助并提出了这个解决方案,这对我来说更容易包围,尽管与user1960808的解决方案大致相同。我非常感谢@ user1960808和@Nina Scholz的帮助,您的解决方案也很有效,并且是解决问题的有趣方法。
编辑:mods随意将其中任何一个标记为答案,因为它们都是有效的