【问题标题】:Javascript: How can I replace an element of an array of objects (by reference, not index)? [duplicate]Javascript:如何替换对象数组的元素(通过引用,而不是索引)? [复制]
【发布时间】:2019-08-01 16:48:59
【问题描述】:

我有几个对象数组

a=[ {v:10}, {v:11}, {v:12}, {v:13} ]

b=[ {v:20}, {v:21}, {v:22}, {v:23} ](等)

以及我要替换的对象的引用列表。

我没有 index 到数组中,但我确实有 我想要替换的项目的引用

这样的引用:s1=a[2]s1=b[0]

如何在不知道它引用哪个数组的情况下使用此引用替换实际数组的元素?

这不起作用:s1 = {v:'new'},因为它只替换 s1,而不是数组的元素

这没有用 s1.v='new' ,因为实际上,我的对象很复杂,有很多属性,我不想逐个属性地更新它们。

谢谢!

【问题讨论】:

  • 完全相同的as before - 查找项目的索引,然后用该索引替换。
  • 你的意思是在一个特定的数组中替换它们(很容易做到),或者在它们碰巧在的任何数组中,而不通过数组列表? (不可能 AFAIK。)
  • @kshetline:是的,我害怕后者。
  • 不过,您可以更新这些对象的内容,内容的更新会自动出现在各处。

标签: javascript arrays pointers properties reference


【解决方案1】:

如果您的对象只是普通的Objects(或至少所有相同的普通类型),您可以删除所有属性并换入新属性:

const replaceProperties = (dest, src) => {
    Object.keys(dest).forEach(key => {
        delete dest[key];
    });

    Object.assign(dest, src);
};

replaceProperties(s1, {v: 'new'});

这不是一个好主意,但有几个原因,所以看看你是否可以开始在数组中创建索引。

如果您的对象也都是相同的形状(即始终具有相同的属性),那么利用这一点会更好,并且是重复s1.v = 'new's 的多属性等价物:

Object.assign(s1, {v: 'new'});

【讨论】:

    猜你喜欢
    • 2019-12-10
    • 2018-05-04
    • 2017-11-10
    • 2013-08-23
    • 2018-05-23
    • 2020-04-10
    • 2017-12-26
    • 1970-01-01
    相关资源
    最近更新 更多