gpt4 book ai didi

javascript - 从数组中按属性查找对象

转载 作者:行者123 更新时间:2023-11-28 15:40:36 25 4
gpt4 key购买 nike

使用数组、值和带有嵌套对象的对象:

对象

mesh

数组

['options', 'range', 'x']

值(value)

12.5

是否可以将其翻译为更新属性,例如

mesh.options.range.x = 12.5

尝试:

index = (obj, i) ->
obj[i]

arr.reduce(index, obj) = 12.5

更新

感谢大家提供的优雅解决方案。

最佳答案

使用.reduce()实际上非常适合这个:

// current object----|    |----current key
// v v
arr.reduce(function(obj, key) {
return obj == null ? obj : obj[key];
}, window.mesh);
// ^
// |-- initial object
<小时/>

您尝试使用.reduce()需要传递一个管理“累积”的函数。

这里只要前面的obj不是nullundefined ,它将返回 key当前obj ,成为下一个 obj .

<小时/>

然后,由于您需要分配一个值,因此您实际上想要获取倒数第二个键的值。

var o = arr.slice(0,-1).reduce(function(obj, key) {
return obj == null ? obj : obj[key];
}, window.mesh);

然后检查它是否存在并使用 arr 中的最后一项完成作业。

o && o[arr.pop()] = 12.5;
<小时/>

所有这些都可以抽象为一个函数,该函数根据传递的参数数量执行其中一个或另一个操作。

function setFromArray(obj, arr, val) {
var keys = arguments.length < 3 ? arr.slice() : arr.slice(0, -1);

var o = keys.slice(0,-1).reduce(function(obj, key) {
return obj == null ? obj : obj[key];
}, window.mesh);

if (arguments.length < 3)
return o;
else
o && o[keys.pop()];
}

关于javascript - 从数组中按属性查找对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23942825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com