在数组中赋值一个包含对象的JavaScript对象

5

我对此很好奇。

假设我有一个对象数组,并创建了1个对象,我们将这个对象数组命名为items,而这个对象命名为item

我想通过使用以下代码从我的对象数组中获取特定的项:

//gets an item base on ID
function get_item(td){
    var item = undefined;
    $.each(items, function(i, val) {
        if(val.item_id == td){
            item = val;
        }   
    });
    return item;
}

get_item()基本上获取与提供的ID匹配的对象。

我的问题是,如果我改变了item的属性,它是否也会改变与其关联的数组中的对象的属性?

非常感谢!


你能发布一个数组对象的示例吗? - Mox Shah
3
请展示更多代码。在您的“假设我有...”之后,展示您认为对应于该情况的代码即可。 - Mike 'Pomax' Kamermans
3
如果您在引用数组中更改项,则该项将发生更改。 - Ruchan
3
如果您返回的是存储在数组中的相同实例...... 是的,它将会这样。 - Arun P Johny
1
@JCFrane 在这种格式下是会改变的。 - Arun P Johny
显示剩余3条评论
3个回答

6
如果我改变一个项目的属性,它会不会也改变与之关联的对象在数组中的属性?
是的。
对象并不是复制的。相反,对象的引用被传递。最简单的例子:
var a = [];
var b = a;
b.push(1);
console.log(a); // logs [1]

许多面向对象编程语言都是这样工作的。

2
数组中的对象值也会改变,因为它是一个引用。如果您想了解更多信息,我强烈建议阅读《This和Object Prototypes》。
如果您不希望其发生更改,则应使用类似于lodash的_.clone()函数。
此外,您还可以使用filter来获取对象:
function get_item(td){
    return items.filter(function(item) {
        return item.id === td;
    })[0];
}

这很有帮助。谢谢。 - iamjc015

1
你可以更新你的函数为:

var data= array();
function get_item(propertyValue, propertyName){
    var retval;
    for(var i = 0; i < data.length; i++){
         if(data[i][propertyName]==propertyValue){
            retval = data[i];
            break;
         }
    }
    return retval;
}

使用它。
var item1 = get_item(1,"id");
var item2 = get_item("john","name");

你能否详细说明一下? - iamjc015
这怎么回答OP的问题?“如果我更改了item的属性,它是否也会更改与其关联在数组中的对象的属性?” - Felix Kling
它不会回答问题,但它会提供帮助。 - iamjc015
@JCFrane:有很多东西可以帮助解决问题,但这并不意味着在帖子中发布它们是合适的。正如术语所示,“答案”应该回答提出的问题。正如术语所示,“答案”应该回答提出的问题。 - Felix Kling
@FelixKling 嗯,谢谢 =) - iamjc015

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接