首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JQuery $.extend()递归特性

JQuery $.extend()递归特性
EN

Stack Overflow用户
提问于 2014-03-29 19:12:45
回答 1查看 46关注 0票数 0

我想在数组中的特定位置扩展一个对象,而不必再次发送整个数组。

示例:

从这样的数组开始:

代码语言:javascript
复制
sensors = [{value: 10}, {value: 20}];

现在假设我想更改第二个传感器的值,我可以在jQuery中这样做:

代码语言:javascript
复制
newSensorValue = {1: {value:30}};
$.extend(true, sensors, newSensorValue);
// sensors = [{value: 10}, {value: 30}];

但是,如果数组不是直接合并的对象,则这不起作用:

代码语言:javascript
复制
node = {x: 10, y: 10, node_id: 1, sensors: [
    {sensor_id: 1, value: 10}, 
    {sensor_id: 2, value: 20}
]};
newNodeData = {sensors: {
    1: {value:30}
}};
$.extend(true, node, newNodeData);
// node = {x: 10, y: 10, node_id: 1, sensors: {
//     1: {value:30}
// }};

如果数组嵌套在一个对象中,为什么$.extend()突然表现出不同的行为?

我自己的解决方案是创建一个空对象数组,只给出要更改"value“属性的对象,例如:

代码语言:javascript
复制
newNodeData = {sensors: [
    {}, {value: 30}
]};

既然这看起来很难看,还有什么更好的方法吗?我倾向于保留传感器属性为数组,因为我希望使用forEach快速遍历每个传感器。

编辑:忘了说如果我说了

代码语言:javascript
复制
$.extend(true, node.sensors, newNodeData.sensors);

它的工作原理与第一个示例(即,它的工作原理)相同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-29 19:23:06

如果不想更改元素,则可以将其保留为空。

代码语言:javascript
复制
node = {x: 10, y: 10, node_id: 1, sensors: [
    {sensor_id: 1, value: 10}, 
    {sensor_id: 2, value: 20}
]};
newNodeData = {sensors: [,{value:30}]};
$.extend(true, node, newNodeData);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22735638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档