Как работает второй параметр array.push в JavaScript? - PullRequest
0 голосов
/ 05 июня 2019

В настоящее время я изучаю, как Array.prototype.push () работает с веб-документами MDN. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push

На этой странице обобщенный синтаксис выражается как

arr.push(element1[, ...[, elementN]])

, но каково назначение второго параметра (elementN)?

На этой странице показан пример, объединяющий различные виды спорта, например

var sports = ['soccer', 'baseball'];
var total = sports.push('football', 'swimming');

console.log(sports); // ['soccer', 'baseball', 'football', 'swimming']
console.log(total);  // 4

, но что будет первым и вторым параметром, если вы захотите сделать следующее?

var teamSports = ['soccer', 'baseball', 'hockey', 'American football'];
var individualSports = ['weight lifting', 'track & field', 'boxing', 'wrestling']

// prepare an empty array
var allSports = []; 

// add all of the team sports 
allSports.push(???????)

// add all of the individual sports
allSports.push(????????)

// all the sports added to the array
console.log(allSports); // ['soccer', 'baseball', 'hockey', 'American football', 'weight lifting', 'track & field', 'boxing', 'wrestling']

[ДОПОЛНИТЕЛЬНЫЙ ФОН НИЖЕ (ПОСЛЕ ПОЛУЧЕНИЯ НЕКОТОРЫХ ОТВЕТОВ И КОММЕНТАРИЙ)]

Благодарю тех, кто ответил или прокомментировал мой пост. Основная цель моего поста состояла в том, чтобы выяснить значение части [, elementN]], а не «копировать элементы массива в другой массив».

Мой пример

allSports.push(???????) 

действительно включает «элементы массива в другой массив», но я просто пытался выяснить общее правило параметров push, получив больше примеров.

На странице веб-документов MDN, ссылку на которую я указал, показанные примеры имели всего два параметра, например

var sports = ['soccer', 'baseball'];
var total = sports.push('football', 'swimming');

console.log(sports); // ['soccer', 'baseball', 'football', 'swimming']
console.log(total);  // 4

или

var vegetables = ['parsnip', 'potato'];
var moreVegs = ['celery', 'beetroot'];

// Merge the second array into the first one
// Equivalent to vegetables.push('celery', 'beetroot');
Array.prototype.push.apply(vegetables, moreVegs);

console.log(vegetables); // ['parsnip', 'potato', 'celery', 'beetroot']

Поскольку оба этих примера имели два параметра, я просто предположил, что push получает два параметра (что оказалось неверным предположением в ретроспективе), и именно поэтому мой вопрос был в основном о том, «как» второй параметр '[, elementN] работает ". Если бы было еще несколько примеров, таких как

var sports = ['soccer', 'baseball'];
var total = sports.push('football', 'swimming');

console.log(sports); // ['soccer', 'baseball', 'football', 'swimming']
console.log(total);  // 4

total = sports.push('weight lifting', 'track & field', 'boxing', 'wrestling')
console.log(sports); // ['soccer', 'baseball', 'football', 'swimming', 'weight lifting', 'track & field', 'boxing', 'wrestling']
console.log(total); // 8

, я бы не предположил, что push требует двух параметров, а [, elementN] является его вторым параметром, и я бы понял, что push может принимать столько параметров, сколько вы хотите.

Еще одно замечание: я не знал, что

...

также был частью кода, который называется оператором распространения. Я просто подумал, что вы, ребята, «опускаете» некоторые вещи этим выражением. Это также привело к моей неправильной интерпретации.

Ответы [ 2 ]

3 голосов
/ 05 июня 2019

Вы можете использовать спред оператора.

allSports.push(...teamSports,...individualSports);

Рабочий фрагмент

var teamSports = ['soccer', 'baseball', 'hockey', 'American football'];
var individualSports = ['weight lifting', 'track & field', 'boxing', 'wrestling']
var allSports = []; 
allSports.push(...teamSports,...individualSports);
console.log(allSports)
1 голос
/ 05 июня 2019

Array.push () принимает несколько параметров, поэтому вы должны использовать оператор spread , когда хотите объединить массивы.

Вот так:

var teamSports = ['soccer', 'baseball', 'hockey', 'American football'];
var individualSports = ['weight lifting', 'track & field', 'boxing', 'wrestling']

// prepare an empty array
var allSports = [];

// add all of the team sports 
allSports.push(...teamSports)

// add all of the individual sports
allSports.push(...individualSports)

// all the sports added to the array
console.log(allSports);
...