在编写大型项目时,我越来越喜欢LoDash / Underscore。
obj['key'] 或 obj.key 添加都是可靠的纯 JavaScript 答案。然而,在处理对象和数组时,LoDash 和 Underscore 库都提供了许多额外的便利功能。
.push() is for Arrays,不适用于objects。
根据您要查找的内容,有两个特定的功能可能会很好地利用并提供类似于arr.push() 的功能。有关更多信息,请查看文档,那里有一些很好的示例。
第二个对象将覆盖或添加到基础对象。
undefined 值不会被复制。
var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
_.merge(obj, obj2);
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3"}
第二个对象将覆盖或添加到基础对象。
undefined 将被复制。
var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
_.extend(obj, obj2);
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3", key4: undefined}
第二个对象包含默认值,如果它们不存在,它们将被添加到基础对象中。
undefined 如果 key 已经存在,值将被复制。
var obj = {key3: "value3", key5: "value5"};
var obj2 = {key1: "value1", key2:"value2", key3: "valueDefault", key4: "valueDefault", key5: undefined};
_.defaults(obj, obj2);
console.log(obj);
// → {key3: "value3", key5: "value5", key1: "value1", key2: "value2", key4: "valueDefault"}
另外,值得一提的是 jQuery.extend,它的功能类似于 _.merge,如果您已经在使用 jQuery,它可能是一个更好的选择。
第二个对象将覆盖或添加到基础对象。
undefined 值不会被复制。
var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
$.extend(obj, obj2);
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3"}
值得一提的是 ES6/ES2015 Object.assign,它的功能类似于 _.merge,如果你已经在使用像 Babel 这样的 ES6/ES2015 polyfill,如果你想 polyfill yourself,它可能是最好的选择.
第二个对象将覆盖或添加到基础对象。
undefined 将被复制。
var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
Object.assign(obj, obj2);
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3", key4: undefined}