Я ищу лучший способ «добавить» несколько объектов 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 6 введен
Object.assign()
для достижения этой цели изначально в Javascript.Документация MDN по Object.assign ()
Object.assign
поддерживается во многих современных браузерах, но еще не во всех. Используйте транспилятор, такой как Babel и Traceur, для создания обратно совместимого кода ES5 JavaScript.источник
Object.assign.apply({}, [{a: 1}, {b: 2}, ....])
Object.assign.apply
объединению массива объектов является использование оператора распространения:Object.assign( ...objects )
Вы можете использовать jquery
$.extend
так:источник
d = $.extend({},a,b,c);
Это должно сделать это:
Вывод:
источник
length
проверяет размер массива при каждом вызове? Я так привык писать,for (var i = 0, len = array.length; i < len; ++i)
что даже не могу вспомнить, почему я начал это делать.ECMAScript 6 имеет расширенный синтаксис . И теперь вы можете это сделать:
источник
У Underscore есть несколько способов сделать это;
1. _.extend (назначение, * источники)
Скопируйте все свойства исходных объектов в целевой объект и верните целевой объект.
Или
2. _.defaults (объект, * по умолчанию)
Заполните неопределенные свойства в объекте значениями из объектов по умолчанию и верните объект .
Или
источник
Почему функция должна быть ограничена 3 аргументами? Также проверьте наличие
hasOwnProperty
.источник
Поверхностное клонирование (за исключением прототипа) или слияние объектов теперь возможно с использованием более короткого синтаксиса, чем Object.assign () .
Синтаксис распространения для объектных литералов был введен в ECMAScript 2018 ):
Оператор распространения (...) поддерживается во многих современных браузерах, но не во всех.
Поэтому рекомендуется использовать транспилятор, такой как Babel, для преобразования кода ECMAScript 2015+ в обратно совместимую версию JavaScript в текущих и более старых браузерах или средах.
Это эквивалентный код, который Babel сгенерирует для вас:
источник
Примечание: существующие свойства в предыдущих объектах будут перезаписаны.
источник
a === d
в конце. Это может быть нормально, а может и нет.Оператор распространения ES7 для объекта легко использовать , в консоли браузера введите
источник
Чтобы объединить динамическое количество объектов, мы можем использовать синтаксис
Object.assign
с расширением .Вышеупомянутая функция принимает любое количество объектов, объединяя все их свойства в новый объект со свойствами из более поздних объектов, перезаписывая свойства из предыдущих объектов.
Демо:
Показать фрагмент кода
Для объединения массива объектов можно применить аналогичный метод.
Демо:
Показать фрагмент кода
источник
Вероятно, самый быстрый, эффективный и более общий способ - это (вы можете объединить любое количество объектов и даже скопировать в первый -> назначить):
Это также позволяет вам изменять первый объект, переданный по ссылке. Если вы этого не хотите, но хотите иметь полностью новый объект, содержащий все свойства, вы можете передать {} в качестве первого аргумента.
Combined_object и object1 оба содержат свойства object1, object2, object3.
В этом случае Combined_object содержит свойства object1, object2, object3, но object1 не изменяется.
Проверьте здесь: https://jsfiddle.net/ppwovxey/1/
Примечание: объекты JavaScript передаются по ссылке.
источник
ES6 ++
Вопрос в том, чтобы объединить разные объекты в один.
Допустим, у вас есть один объект с несколькими ключами, которые являются объектами:
это было решение, которое я нашел (все еще нужно foreach: /)
Делая это, мы можем динамически добавлять ВСЕ ключи объекта в один.
источник
Самый простой: операторы распространения
источник
источник