如何创建一个函数来检查数组javascript中的键值

时间:2017-04-04 19:52:21

标签: javascript arrays

我有一个函数,我试图向对象添加一个新数组。我一直收到错误' target.push不是函数'。

这是我的功能

    function targetChange(target, source) {
        Object.keys(source).forEach(function(keys) {
            for(i=0; i<source.length; i++) {
                target[keys].push(source[keys]);
            }                 
        });
        console.log(target);
    }

数据:

source = {
    BasinId: 123,
    subBasinId: 45,
    SubBasinName: newSubBasin
}
target = {
    BasinId: (array of hundreds of ids),
    subBasinId: (array of hundreds of ids),
    SubBasinName: (array of hundreds of names)
} 

我想在目标内部返回源代码..我想只是将新值添加到现有对象

我传入一个对象作为目标,设置如下{key:value,key:value,...}。源设置方式相同,但我似乎无法将新源添加到目标。有任何想法吗??我现在已经被困在这一段了一段时间。

4 个答案:

答案 0 :(得分:1)

您需要检查目标属性是否为假,然后分配一个数组。然后推送值。

function targetChange(target, source) {
    Object.keys(source).forEach(function(key) {
        target[key] = target[key] || [];
        target[key].push(source[key]);
    });
}

var source = { BasinId: 123, subBasinId: 45, SubBasinName: 'newSubBasin' },
    target = { BasinId: [0, 1, 2, 3, 4], subBasinId: [10, 11, 12, 13, 14], SubBasinName: ['a', 'b', 'c', 'd', 'e'] };

targetChange(target, source);

console.log(target);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)

您无法通过JSON

调用推送方法

变化:

target[keys].push(source[keys]);

有关:

target[keys] = source[keys];

您需要删除 for 循环。

答案 2 :(得分:1)

这应该有效:

<select id="modelos" class="" name="attribute_modelos" data-attribute_name="attribute_modelos" "="" data-show_option_none="yes"><option value="">Elige una opción</option></select>

答案 3 :(得分:1)

我能够以这种方式工作:

    function targetChange(target, source) {

        Object.keys(source).forEach(function(key) {
            for(i=0;i<source.length;i++) {
                target[key][target[key].length++] = source[key][i];
            }
        });

    }