Объединение двух массивов с использованием jQuery "extends" возвращает один массив - PullRequest
1 голос
/ 18 апреля 2020

Я пытаюсь сделать простое объединение двух одномерных массивов, и в результате получается содержимое одного или другого массива, в зависимости от того, как я использую «$ .extend». Очевидно, что я делаю что-то не так, но не вижу этого.

Упрощенный пример:

var array1 = [];
var array2 = [];
var joined1 = [];
var joined2 = [];
....
....
// "1" and "2" below are result of evaluation of some session variables
// I also need to keep contents of array1 and array2
array1 = "1".split(','); // length 1, ["1"]
array2 = "2".split(','); // length 1, ["2"]

var joined1 = $.extend({}, array1, array2); // joined1 has one element ["2"]

// clone array2
var joined2 = array2.slice(0); // ["2"]
$.extend(joined2, array1);     // joined2 = ["1"]

Я думаю, я могу использовать javascript и "foreach" для выполнения sh этого но нужно знать, что я делаю не так с расширением для возможного использования в будущем.

1 Ответ

0 голосов
/ 18 апреля 2020

Проблема в том, что $.extend предназначен для использования с объектами, а не массивами.

Поскольку вы используете его с массивом, он принимает индекс каждого элемента в этом массиве в качестве ключа. Таким образом, второй массив перезаписывает первый при использовании $.extend as, как только интерпретируется как объект, оба имеют значения в ключе 0.

Если вы пытаетесь объединить два массивы вам не нужны jQuery. Используйте собственный метод concat():

let array1 = "1,11".split(',');
let array2 = "2,22".split(','); 
let joined = array1.concat(array2);

console.log(joined);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...