gpt4 book ai didi

JavaScript,深度扩展

转载 作者:行者123 更新时间:2023-12-03 10:38:11 27 4
gpt4 key购买 nike

所以我有一个正在尝试深入扩展的对象 - 现在,如果最低级别只是一个数组,则扩展函数可以工作,所以它看起来像这样:

  function(base, next) {
var dataEntry = base.filter(function(it) {
return it.module === next.module;
})[0];
if (dataEntry) {
var diff = next.customUrl.filter(function(it) {
return dataEntry.customUrl.indexOf(it) === -1;
});
dataEntry.customUrl = dataEntry.customUrl.concat(diff).sort();
//_.extend(dataEntry, next);
} else {
base.push(next);
}
}

如果对象看起来像:

 [
{"name" : "one", "test" : ["1","2"]},
{"name" : "two", "test" : ["1","2"]}
]

但是有些事情必须改变,现在对象看起来像这样:

  [
{"name" : "one", "test" : [{"random1" : true},{"random2" : false}] },
{"name" : "two", "test" : [{"random3" : true},{"random4" : false}]}
]

数组中的键现在是对象数组,并且对象键是随机的。因此,如果有一个具有相同键的对象 - 替换该值(除非它相同,否则将一个新对象插入其中。

因此,对于上面的对象,我将传递它以合并到其中,例如:

{"name" : "one", "test" : [{"random2" :  true}]}

这样会将 random2 的值更改为 true,或类似的内容

{"name" : "one", "test" : [{"random18" : true}] }

这样会随机插入 18 个:

[
{"name" : "one", "test" : [{"random1" : true},{"random2" : false},{"random18" : true}] },
{"name" : "two", "test" : [{"random3" : true},{"random4" : false}]}
]

不确定如何更深地遍历并合并。感谢您的阅读!!

编辑:首先刺它 -

  function(base, next) {
var dataEntry = base.filter(function(it) {
return it.module === next.module;
})[0];
if (dataEntry) {
var allTags = [];
allTags.push.apply(allTags, dataEntry.customUrl);
allTags.push.apply(allTags, next.customUrl);

dataEntry.customUrl = allTags;

} else {
base.push(next);
}
}

不起作用,因为如果对象相同,它不会覆盖它们,只是插入数组。

最佳答案

http://jsfiddle.net/p08ayvv8/
这个 fiddle 向您展示了 jQuery 如何处理(深度)扩展对象。
请参阅http://api.jquery.com/jquery.extend/以获得详细的解释。
值得注意的是,当执行第二个扩展时,jQuery 会将 test 的旧值添加到数组中,这就是我添加的原因

o1.test = o1.test[0];

关于JavaScript,深度扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28906836/

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