如果未找到值,则插入到数组中

时间:2017-06-07 07:26:15

标签: javascript jquery arrays

我有一个这样构建的数组:

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.这样做的最佳方法是什么?此外 - 他们需要顺序添加。

3 个答案:

答案 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;
&#13;
&#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随意将其中任何一个标记为答案,因为它们都是有效的