我正在寻找“添加”多个 JavaScript 对象(关联数组)的最佳方法。
例如,给定:
a = { "one" : 1, "two" : 2 };
b = { "three" : 3 };
c = { "four" : 4, "five" : 5 };
什么是最好的计算方法:
{ "one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
我正在寻找“添加”多个 JavaScript 对象(关联数组)的最佳方法。
例如,给定:
a = { "one" : 1, "two" : 2 };
b = { "three" : 3 };
c = { "four" : 4, "five" : 5 };
什么是最好的计算方法:
{ "one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
引入 ECMAscript 6Object.assign()
以在 Javascript 中实现这一点。
所述Object.assign()方法被用于所有可枚举自己的属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };
var obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
Object.assign
许多现代浏览器都支持,但还不是全部。使用像Babel和Traceur 这样的转译器来生成向后兼容的 ES5 JavaScript。
ECMAScript 6 具有扩展语法。现在你可以这样做:
const obj1 = { 1: 11, 2: 22 };
const obj2 = { 3: 33, 4: 44 };
const obj3 = { ...obj1, ...obj2 };
console.log(obj3); // {1: 11, 2: 22, 3: 33, 4: 44}
这应该这样做:
function collect() {
var ret = {};
var len = arguments.length;
for (var i = 0; i < len; i++) {
for (p in arguments[i]) {
if (arguments[i].hasOwnProperty(p)) {
ret[p] = arguments[i][p];
}
}
}
return ret;
}
let a = { "one" : 1, "two" : 2 };
let b = { "three" : 3 };
let c = { "four" : 4, "five" : 5 };
let d = collect(a, b, c);
console.log(d);
输出:
{
"one": 1,
"two": 2,
"three": 3,
"four": 4,
"five": 5
}
你可以$.extend
像这样使用jquery :
let a = { "one" : 1, "two" : 2 },
b = { "three" : 3 },
c = { "four" : 4, "five" : 5 };
let d = $.extend({}, a, b, c)
console.log(d)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Underscore几乎没有方法可以做到这一点;
将源对象中的所有属性复制到目标对象,并返回目标对象。
_.extend(a, _.extend(b, c));
=> {"one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
或者
_.extend(a, b);
=> {"one" : 1, "two" : 2, "three" : 3}
_.extend(a, c);
=> {"one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
2. _.defaults(object, *defaults)
用默认对象的值填充object中未定义的属性,并返回object。
_.defaults(a, _.defaults(b, c));
=> {"one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
或者
_.defaults(a, b);
=> {"one" : 1, "two" : 2, "three" : 3}
_.defaults(a, c);
=> {"one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }