Как объединить два объекта с одинаковыми именами ключей в jquery?

#jquery #object

#jquery #объект

Вопрос:

У меня есть два объекта

Object1

 0: {count: "100", keyFrom: "2"}
1: {count: "200", keyFrom: "4"}
2: {count: "300", keyFrom: "8"}
  

Object2

 0: {count: "400", keyFrom: "3"}
1: {count: "500", keyFrom: "9"}
2: {count: "600", keyFrom: "7"}
3: {count: "700", keyFrom: "1"}
4: {count: "900", keyFrom: "5"}
  

Я хочу объединить эти два объекта. Я попытался использовать

 var objects = {};
$.extend(objects, object1, object2);
  

Но это дает мне результат, подобный,

 0: {count: "100", keyFrom: "2"}
1: {count: "200", keyFrom: "4"}
2: {count: "300", keyFrom: "8"}
3: {count: "700", keyFrom: "1"}
4: {count: "900", keyFrom: "5"}
  

В нем опускаются первые три значения object2 .
Но я хочу объединить, как,

 0: {count: "100", keyFrom: "2"}
1: {count: "200", keyFrom: "4"}
2: {count: "300", keyFrom: "8"}
3: {count: "400", keyFrom: "3"}
4: {count: "500", keyFrom: "9"}
5: {count: "600", keyFrom: "7"}
6: {count: "700", keyFrom: "1"}
7: {count: "900", keyFrom: "5"}
  

Помогите мне решить проблему.

Комментарии:

1. Являются ли они массивами или объектами, не являющимися массивами?

2. Похоже, что это два массива, содержащих объекты. Значит, вы можете просто использовать concat?

3. три ключа не обновляются, объект bz json не может иметь дублирующихся ключей, поэтому ключ 0,1,2 уже присутствует в первом объекте, поэтому он снова будет взят из второго объекта.

4. ознакомьтесь с моим ответом, брат, это может вам помочь

Ответ №1:

Если это массивы, просто используйте concat :

 var new_object = object1.concat(object2);
  

Живой пример:

 var object1 = [
    {count: "100", keyFrom: "2"},
    {count: "200", keyFrom: "4"},
    {count: "300", keyFrom: "8"}
];
var object2 = [
    {count: "400", keyFrom: "3"},
    {count: "500", keyFrom: "9"},
    {count: "600", keyFrom: "7"},
    {count: "700", keyFrom: "1"},
    {count: "900", keyFrom: "5"}
];

var new_object = object1.concat(object2);
console.log(new_object);  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>  

Если это объекты, не являющиеся массивами, с этими именами свойств, и в результате вы хотите получить массив, вы можете использовать newish Object.values (который может быть полизаполнен) и расширенную нотацию (ES2015 ) или Array.prototype.push.apply (ES5):

 var new_object = Object.values(object1);
new_object.push(...Object.values(object2));
  

или

 var new_object = Object.values(object1);
Array.prototype.push.apply(new_object, Object.values(object2));
  

Живой пример:

 var object1 = {
    0: {count: "100", keyFrom: "2"},
    1: {count: "200", keyFrom: "4"},
    2: {count: "300", keyFrom: "8"}
};
var object2 = {
    0: {count: "400", keyFrom: "3"},
    1: {count: "500", keyFrom: "9"},
    2: {count: "600", keyFrom: "7"},
    3: {count: "700", keyFrom: "1"},
    4: {count: "900", keyFrom: "5"}
};

var new_object = Object.values(object1);
new_object.push(...Object.values(object2));
// Or in ES5 with an `Object.values` polyfill
// Array.prototype.push.apply(new_object, Object.values(object2));
console.log(new_object);  

Если они не являются объектами массива с этими именами свойств, и вам нужен объект, не являющийся массивом, с похожими именами свойств, вы можете использовать Object.assign (который является встроенной версией $.extend в ES2015 ) или $.extend позже:

 var new_object = Object.values(object1);
new_object.push(...Object.values(object2));
new_object = Object.assign({}, new_object);
  

 var object1 = {
    0: {count: "100", keyFrom: "2"},
    1: {count: "200", keyFrom: "4"},
    2: {count: "300", keyFrom: "8"}
};
var object2 = {
    0: {count: "400", keyFrom: "3"},
    1: {count: "500", keyFrom: "9"},
    2: {count: "600", keyFrom: "7"},
    3: {count: "700", keyFrom: "1"},
    4: {count: "900", keyFrom: "5"}
};

var new_object = Object.values(object1);
new_object.push(...Object.values(object2));
new_object = Object.assign({}, new_object);
console.log(new_object);  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>  

Комментарии:

1. Сэр, var new_object = Array.prototype.concat.call(data.experienceList.experienceTo, data.experienceList.experienceFrom); работает для меня

2. @selva — Интересно. Я удалил это из своего ответа, потому что то, что он создал, выглядело не так, как вы хотели. Но если это произойдет, отлично!

Ответ №2:

Вам нужно преобразовать их в массивы и объединить:

 var array1 = $.map(object1, function(value, index) {
    return [value];
});
var array2 = $.map(object2, function(value, index) {
    return [value];
});
var result = $.merge($.merge([], array1, array2);
  

Или еще проще, комбинируя с предыдущим ответом:

 var result = $.merge($.merge([], Object.values(object1)), Object.values(object2));
  

Ответ №3:

Пожалуйста, используйте его в массиве, только тогда вы сможете объединить по мере необходимости. пожалуйста, обратитесь к приведенному ниже коду

 let x = [{count: "100", keyFrom: "2"} ,{count: "200", keyFrom: "4"},{count: "300", keyFrom: "8"}];
let y = [{count: "400", keyFrom: "3"},{count: "500", keyFrom: "9"},{count: "600", keyFrom: "7"},
         {count: "700", keyFrom: "1"},{count: "900", keyFrom: "5"}];
console.log(x.concat(y));