gpt4 book ai didi

javascript - 自制函数合并对象的问题

转载 作者:行者123 更新时间:2023-11-30 13:35:51 24 4
gpt4 key购买 nike

我正在尝试创建一个合并数组的函数。原因是,我有一个函数应该获取实体的设置,并将它们与全局默认值合并。

//So for example, let's say globalOptions is something like this
var globalOptions={opt1:'foo',opt2:'something'};
//and this is entityOptions
var entityOptions={opt1:'foofoo',opt2:null};

唯一的区别是它有对象中的对象和对象中的对象,所以我做的是一个循环遍历所有对象的函数,我想我以后可以很容易地循环遍历所有对象。请忽略数组的东西。这是有缺陷的,但不需要。

function loopObj(obj, call, where, objcall, array) {
if ($.isArray(obj) || $.isPlainObject(obj)) {
for (i in obj) {
if ($.isArray(obj)) {
if (array) {
loopObj(obj[i], call, where[where.length] = i, true);
if (objcall) {
call(obj[i],where,true);
}
}
else {
loopObj(obj[i], call, where+'['+i+']', false);
if (objcall) {
call(obj[i],where,true);
}
}
}
else {
if (array) {
loopObj(obj[i], call, where[where.length] = parseInt(i), true);
if (objcall) {
call(obj[i],where,true);
}
}
else {
loopObj(obj[i], call, where+'[\''+i+'\']', false);
if (objcall) {
call(obj[i],where,true);
}
}
}
}
}
else {
return call(obj,where);
}
}

然后我做了这个程序来转换它:

function mergeObj(a,b) {
temp.retd = new Object();
loopObj(a,function (c,d) {
if (c) {
eval(d.replace('%par%','temp.retd'))=c;
}
else {
eval(d.replace('%par%','temp.retd'))=eval(d.replace('%par%','b'));
}
},'%par%', true);
return temp.retd();
}

我得到错误:

Uncaught ReferenceError: Invalid left-hand side in assignment
(anonymous function)base.js:51
loopObjbase.js:40
loopObjbase.js:31
mergeObjbase.js:46
(anonymous function)base.js:72

我知道这是什么意思,eval 返回一个 anonomys 变量(变量的副本),所以我无法设置它,只能获取它。

最佳答案

如果我理解您的问题,您可以使用 jQuery.extend() 合并对象.

jQuery.extend(object, { foo: 'bar' });

或用underscore.extend()

_.extend({foo:'foo'},{bar:'bar'});

关于javascript - 自制函数合并对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4869593/

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