Как объединить свойства нескольких объектов JavaScript
Я ищу лучший способ "добавить" несколько объектов JavaScript (ассоциативные массивы).
например, дано:
a = { "one" : 1, "two" : 2 };
b = { "three" : 3 };
c = { "four" : 4, "five" : 5 };
каков наилучший способ вычисления:
{ "one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
11 ответов:
jQuery есть хороший способ сделать это.
Это должно сделать это:
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; }вход:
a = { "one" : 1, "two" : 2 }; b = { "three" : 3 }; c = { "four" : 4, "five" : 5 }; d = collect(a, b, c); console.log(d);выход:
Object one=1 two=2 three=3 four=4 five=5
подчеркивание имеет несколько методов для этого;
1. _.продления(назначения *источники)
скопируйте все свойства в источник объекты на назначения
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}
почему функция должна быть ограничена 3 аргументами? Кроме того, проверьте
hasOwnProperty.function Collect() { var o={}; for(var i=0;i<arguments.length;i++) { var arg=arguments[i]; if(typeof arg != "object") continue; for(var p in arg) { if(arg.hasOwnProperty(p)) o[p] = arg[p]; } } return o; }
function Collect(a, b, c) { for (property in b) a[property] = b[property]; for (property in c) a[property] = c[property]; return a; }Примечание: существующие свойства в предыдущих объектах будут перезаписаны.
вероятно, самый быстрый, эффективный и более общий способ заключается в следующем (вы можете объединить любое количество объектов и даже скопировать в первый - > назначить):
function object_merge(){ for (var i=1; i<arguments.length; i++) for (var a in arguments[i]) arguments[0][a] = arguments[i][a]; return arguments[0]; }Он также позволяет изменять первый объект, как он прошел по ссылке. Если вы не хотите этого, но хотите иметь совершенно новый объект, содержащий все свойства, то вы можете пройти {} в качестве первого аргумента.
var object1={a:1,b:2}; var object2={c:3,d:4}; var object3={d:5,e:6}; var combined_object=object_merge(object1,object2,object3);combined_object и object1 оба содержат свойства object1, object2, object3.
var object1={a:1,b:2}; var object2={c:3,d:4}; var object3={d:5,e:6}; var combined_object=object_merge({},object1,object2,object3);в этом случае combined_object содержит свойства object1, object2,object3,но object1 не изменяется.
, проверьте здесь: https://jsfiddle.net/ppwovxey/1/
Примечание: объекты JavaScript передаются по ссылке.
самый простой: операторы распространения
var obj1 = {a: 1} var obj2 = {b: 2} var concat = { ...obj1, ...obj2 } // { a: 1, b: 2 }
function collect(a, b, c){ var d = {}; for(p in a){ d[p] = a[p]; } for(p in b){ d[p] = b[p]; } for(p in c){ d[p] = c[p]; } return d; }
ES6 ++
вопрос заключается в добавлении различных разные объектов в один.
let obj = {}; const obj1 = { foo: 'bar' }; const obj2 = { bar: 'foo' }; Object.assign(obj, obj1, obj2); //output => {foo: 'bar', bar: 'foo'};допустим, у вас есть один объект с несколькими ключами, которые являются объектами:
let obj = { foo: { bar: 'foo' }, bar: { foo: 'bar' } }это было решение, которое я нашел (все еще нужно foreach :/)
let objAll = {}; Object.values(obj).forEach(o => { objAll = {...objAll, ...o}; });таким образом, мы можем динамически добавлять все ключи объектов в один.
// Output => { bar: 'foo', foo: 'bar' }
Comments