Как объединить два объекта с одинаковыми именами ключей в jquery? - PullRequest
0 голосов
/ 12 апреля 2019

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

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"}

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

Ответы [ 3 ]

2 голосов
/ 12 апреля 2019

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

var new_object = object1.concat(object2);

Live Пример:

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>

Если они не являются объектами массива с этими именами свойств, и вы хотите получить массив в результате, вы можете использовать новую 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));

Live Пример:

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>
0 голосов
/ 12 апреля 2019

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

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));
0 голосов
/ 12 апреля 2019

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

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...