Array.prototype.concat()

Содержание

Polyfill

是在第五版本里被添加到 ECMA-262 标准的;这样它可能在标准的其他实现中不存在,你可以在你调用 之前插入下面的代码,在本地不支持的情况下使用 。该算法是 ECMA-262 第5版中指定的算法。它假定 和 拥有它们的初始值,且 等价于 。


// Production steps of ECMA-262, Edition 5, 15.4.4.18
// Reference: http://es5.github.io/#x15.4.4.18
if (!Array.prototype.forEach) {

  Array.prototype.forEach = function(callback, thisArg) {

    var T, k;

    if (this == null) {
      throw new TypeError(' this is null or not defined');
    }

    // 1. Let O be the result of calling toObject() passing the
    // |this| value as the argument.
    var O = Object(this);

    // 2. Let lenValue be the result of calling the Get() internal
    // method of O with the argument "length".
    // 3. Let len be toUint32(lenValue).
    var len = O.length >>> 0;

    // 4. If isCallable(callback) is false, throw a TypeError exception. 
    // See: http://es5.github.com/#x9.11
    if (typeof callback !== "function") {
      throw new TypeError(callback + ' is not a function');
    }

    // 5. If thisArg was supplied, let T be thisArg; else let
    // T be undefined.
    if (arguments.length > 1) {
      T = thisArg;
    }

    // 6. Let k be 0
    k = 0;

    // 7. Repeat, while k < len
    while (k < len) {

      var kValue;

      // a. Let Pk be ToString(k).
      //    This is implicit for LHS operands of the in operator
      // b. Let kPresent be the result of calling the HasProperty
      //    internal method of O with argument Pk.
      //    This step can be combined with c
      // c. If kPresent is true, then
      if (k in O) {

        // i. Let kValue be the result of calling the Get internal
        // method of O with argument Pk.
        kValue = O;

        // ii. Call the Call internal method of callback with T as
        // the this value and argument list containing kValue, k, and O.
        callback.call(T, kValue, k, O);
      }
      // d. Increase k by 1.
      k++;
    }
    // 8. return undefined
  };
}

JavaScript

JS Array concat() constructor copyWithin() entries() every() fill() filter() find() findIndex() forEach() from() includes() indexOf() isArray() join() keys() length lastIndexOf() map() pop() prototype push() reduce() reduceRight() reverse() shift() slice() some() sort() splice() toString() unshift() valueOf()

JS Boolean constructor prototype toString() valueOf()

JS Classes constructor() extends static super

JS Date constructor getDate() getDay() getFullYear() getHours() getMilliseconds() getMinutes() getMonth() getSeconds() getTime() getTimezoneOffset() getUTCDate() getUTCDay() getUTCFullYear() getUTCHours() getUTCMilliseconds() getUTCMinutes() getUTCMonth() getUTCSeconds() now() parse() prototype setDate() setFullYear() setHours() setMilliseconds() setMinutes() setMonth() setSeconds() setTime() setUTCDate() setUTCFullYear() setUTCHours() setUTCMilliseconds() setUTCMinutes() setUTCMonth() setUTCSeconds() toDateString() toISOString() toJSON() toLocaleDateString() toLocaleTimeString() toLocaleString() toString() toTimeString() toUTCString() UTC() valueOf()

JS Error name message

JS Global decodeURI() decodeURIComponent() encodeURI() encodeURIComponent() escape() eval() Infinity isFinite() isNaN() NaN Number() parseFloat() parseInt() String() undefined unescape()

JS JSON parse() stringify()

JS Math abs() acos() acosh() asin() asinh() atan() atan2() atanh() cbrt() ceil() cos() cosh() E exp() floor() LN2 LN10 log() LOG2E LOG10E max() min() PI pow() random() round() sin() sqrt() SQRT1_2 SQRT2 tan() tanh() trunc()

JS Number constructor isFinite() isInteger() isNaN() isSafeInteger() MAX_VALUE MIN_VALUE NEGATIVE_INFINITY NaN POSITIVE_INFINITY prototype toExponential() toFixed() toLocaleString() toPrecision() toString() valueOf()

JS OperatorsJS RegExp constructor compile() exec() g global i ignoreCase lastIndex m multiline n+ n* n? n{X} n{X,Y} n{X,} n$ ^n ?=n ?!n source test() toString() (x|y) . \w \W \d \D \s \S \b \B \0 \n \f \r \t \v \xxx \xdd \uxxxx

JS Statements break class continue debugger do…while for for…in for…of function if…else return switch throw try…catch var while

JS String charAt() charCodeAt() concat() constructor endsWith() fromCharCode() includes() indexOf() lastIndexOf() length localeCompare() match() prototype repeat() replace() search() slice() split() startsWith() substr() substring() toLocaleLowerCase() toLocaleUpperCase() toLowerCase() toString() toUpperCase() trim() valueOf()

Join Two or More Tables

You can combine rows from two or more tables, based on a related column between them, by using a JOIN statement.

Consider you have a «users» table and a «products» table:

users

products

These two tables can be combined by using users’ field and products’ field.

Example

Select records with a match in both tables:

var mysql = require(‘mysql’); var con = mysql.createConnection({  host: «localhost»,  user: «yourusername»,  password: «yourpassword»,  database: «mydb»});con.connect(function(err) {  if (err) throw err;  var sql = «SELECT users.name AS user, products.name AS favorite FROM users JOIN products ON users.favorite_product = products.id»;  con.query(sql, function (err, result) {    if (err) throw err;    console.log(result);  }); });

Note: You can use INNER JOIN instead of JOIN. They will both give you the same result.

Save the code above in a file called «demo_db_join.js» and run the file:

Run «demo_db_join.js»

C:\Users\Your Name>node demo_db_join.js

Which will give you this result:

As you can see from the result above, only the records with a match in both tables are returned.

Опис

Метод  виконує функцію  один раз для кожного елемента в масиві, аж поки не буде знайдено такий, для якого повертає . Щойно такий елемент знайдено, одразу ж повертає значення цього елемента. В іншому випадку,   повертає . Функція викликається для кожного індексу масиву з  по  і виконується для усіх елементів, не лише для тих, які мають присвоєні значення. Це означає, що цей метод може бути менш ефективним для розріджених масивів у порівнянні з методами, які обробляють лише ті, елементи, яким присвоєні значення.

Функція викликається з трьома аргументами: значення елемента, індекс елемента і об’єкт , перебір якого здійснюється.

Якщо параметр передано до , його буде використано як для кожного виклику . Якщо його не передано, тоді використовуватиметься .

Метод не змінює масив, для якого викликається.


Діапазон елементів, що їх має обробити , визначається ще до першого виклику функції . Тому  не обробляє елементи, додані до масиву після того, як почалося виконання . Якщо існуючий, ще не опрацьований елемент масиву, змінюється функцією , його значення, що передається до , буде значенням на той момент, коли  доходить до індексу цього елемента. Видалені елементи все одно опрацьовуються.

Example

Suppose you have a one-to-many relationship between a and its . You want to retrieve all teams along with their players. Here’s the query for to do this:

SELECTt.idAS team_id,t.nameAS team_name,p.idAS player_id,p.nameAS player_nameFROM   teams tLEFT OUTER JOIN players pONt.id=p.team_id;

Assume that this query returns the following result set:

let resultSet ={ team_id1, team_name'New England Patriots', player_id1, player_name'Tom Brady'},{ team_id1, team_name'New England Patriots', player_id2, player_name'Rob Gronkowski'},{ team_id2, team_name'New York Jets',        player_id3, player_name'Geno Smith'},{ team_id2, team_name'New York Jets',        player_id4, player_name'Darrelle Revis'};

You can use JoinJS to convert this result set in to an array of teams with nested players:

{        id1,        name'New England Patriots',        players{ id1, name'Tom Brady'},{ id2, name'Rob Gronkowski'}},{        id2,        name'New York Jets',        players{ id3, name'Geno Smith'},{ id4, name'Darrelle Revis'}}

To teach JoinJS how to do this, you must create two result maps that describe your objects:

constresultMaps={        mapId'teamMap',        idProperty'id',        properties'name',        collections{name'players', mapId'playerMap', columnPrefix'player_'}},{        mapId'playerMap',        idProperty'id',        properties'name'}

Once you have created these result maps, you can simply call JoinJS to convert your result set in to objects:

let mappedResult =joinjs.map(resultSet, resultMaps,'teamMap','team_');

Совместимость с браузерами

Update compatibility data on GitHub

Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome для Android Firefox для Android Opera для Android Safari on iOS Samsung Internet Node.js
Chrome Полная поддержка 1 Edge Полная поддержка 12 Firefox Полная поддержка 1 IE Полная поддержка 5.5 Замечания Opera Полная поддержка 4 Safari Полная поддержка 1 WebView Android Полная поддержка 1 Chrome Android Полная поддержка 18 Firefox Android Полная поддержка 4 Opera Android Полная поддержка 10.1 Safari iOS Полная поддержка 1 Samsung Internet Android Полная поддержка 1.0 nodejs Полная поддержка 0.1.100

Обратная совместимость

В JavaScript 1.2 метод возвращал удалённый элемент только если был удалён один элемент (параметр равен 1); в противном случае метод возвращал массив с удалёнными элементами

Обратите внимание, что последним браузером, использующим JavaScript 1.2, был Netscape Navigator 4, так что вы можете считать, что всегда возвращает массив

Приклади

Знайти об’єкт в масиві за однією з його властивостей

var inventory = ;

function findCherries(fruit) { 
    return fruit.name === 'вишні';
}

console.log(inventory.find(findCherries));
// виводить { name: 'вишні', quantity: 5 }

Використання стрілочної функції ES2015

const inventory = ;

const result = inventory.find( fruit => fruit.name === 'вишні' );

console.log(result) // { name: 'вишні', quantity: 5 }

Знайти просте число у масиві

Наступний приклад знаходить елемент у масиві, який є простим числом (або повертає , якщо простого числа немає):

function isPrime(element, index, array) {
  var start = 2;
  while (start <= Math.sqrt(element)) {
    if (element % start++ < 1) {
      return false;
    }
  }
  return element > 1;
}

.find(isPrime);  // вертає undefined, простих чисел не знайдено
.find(isPrime);  // вертає 5

Наступні приклади демонструють, що неіснуючі та видалені елементи теж опрацьовуються, і що значення, передане до функції зворотного виклику — це їхнє значення на момент перевірки.

// Створити масив без елементів за індексами 2, 3 та 4
const array = ;

// Виводить всі індекси, не лише ті, які мають присвоєні значення
array.find(function(value, index) {
  console.log('Індекс ' + index + ' має значення ' + value);
});

// Виводить всі індекси, в тому числі видалені
array.find(function(value, index) {

  // Видалити елемент 5 в першій ітерації
  if (index == 0) {
    console.log('Видалення елемента array зі значенням ' + array);
    delete array;
  }
  // Елемент 5 перевіряється, хоч і був видалений
  console.log('Індекс ' + index + ' має значення ' + value);
});
// очікуваний результат:
// Видалення елемента array зі значенням 5
// Індекс 0 має значення 0
// Індекс 1 має значення 1
// Індекс 2 має значення undefined
// Індекс 3 має значення undefined
// Індекс 4 має значення undefined
// Індекс 5 має значення undefined
// Індекс 6 має значення 6

範例

範例:建立陣列

以下範例會產生長度為 0 的 陣列,然後指派字串值到 及 ,使陣列的長度變為 100。

var msgArray = [];
msgArray = 'Hello';
msgArray = 'world';

if (msgArray.length === 100) {
  console.log('The length is 100.');
}

建立二維陣列


以下範例會用字串產生一張西洋棋盤的二維陣列。第一步是將士兵 ‘p’ 從 (6,4) 移動至 (4,4),然後清空原本的位置 (6,4)。

var board = ,
  ,
  ,
  ,
  ,
  ,
  ,
   ];

console.log(board.join('\n') + '\n\n');

// 將士兵往前移兩步
board = board;
board = ' ';
console.log(board.join('\n'));

以下是輸出結果:

R,N,B,Q,K,B,N,R
P,P,P,P,P,P,P,P
 , , , , , , , 
 , , , , , , , 
 , , , , , , , 
 , , , , , , , 
p,p,p,p,p,p,p,p
r,n,b,q,k,b,n,r

R,N,B,Q,K,B,N,R
P,P,P,P,P,P,P,P
 , , , , , , , 
 , , , , , , , 
 , , , ,p, , , 
 , , , , , , , 
p,p,p,p, ,p,p,p
r,n,b,q,k,b,n,r

使用陣列來以表格顯示多個數值

values = [];
for (var x = 0; x < 10; x++){
 values.push()
};
console.table(values)

結果會是

0	1	0
1	2	2
2	4	8
3	8	18
4	16	32
5	32	50
6	64	72
7	128	98
8	256	128
9	512	162

(第一欄為索引)

Описание

Метод возвращает новый массив.

Если разделитель найден, он удаляется из строки, а подстроки возвращаются в массиве. Если разделитель опущен, массив будет содержать только один элемент, состоящий из всей строки. Если разделитель является пустой строкой, строка будет преобразована в массив символов.

Если разделитель является регулярным выражением, содержащим подгруппы, то каждый раз при сопоставлении с разделителем, результаты (включая те, что не определены) захвата подгруппы будут помещаться внутрь выходного массива. Однако, не все браузеры поддерживают эту возможность.

Примечание: Если строка является пустой строкой, метод вернёт массив, состоящий из одной пустой строки, а не пустой массив.

Примеры

Можно также использовать  вместо , если не нужно переназначать переменные внутри блока.

Обход DOM коллекций наподобие : следующий пример добавляет класс  параграфам, являющимся непосредственными потомками статей:

Вы можете выполнять обход генераторов, вот пример:

function* fibonacci() { // функция-генератор
    let  = ;
    for (;;) {
         = ;
        yield curr;
    }
}

for (let n of fibonacci()) {
    // ограничивает последовательность на 1000
    if (n > 1000)
        break;
    console.log(n);
}

Не пытайтесь повторно использовать генератор

Генераторы нельзя использовать дважды, даже если цикл  завершится аварийно, например, через оператор . При выходе из цикла генератор завершается, и любые попытки получить из него значение обречены.

Различия между  и 


Оба оператора, и  и  производят обход объектов . Разница в том, как они это делают.

Для обход перечисляемых свойств объекта осуществляется в произвольном порядке.

Для  обход происходит в соответствии с тем, какой порядок определен в итерируемом объекте.

Следующий пример показывает различия в работе циклов  и  при обходе .

Разберемся шаг за шагом в вышеописанном коде.

Каждый объект унаследует метод  и каждый массив унаследует метод  благодаря созданию их в и . Объект  унаследует методы  и  из-за наследования через прототип.

Цикл выводит только перечисляемые свойства объекта , в порядке их создания. Он не выводит значения , ,  и  поскольку они не являются перечисляемыми. Выводятся же имена свойств и методов, например  и . Если вы еще не совсем поняли, по каким свойствам осуществляется обход, вот дополнительное объяснение того, как работает .

Цикл аналогичен предыдущему, но использует для проверки того, собственное ли это свойство объекта или унаследованое. Выводятся только собственные свойства. Имена , ,  и  принадлежат только экземпляру объекта (не унаследованы). Методы  и  не выводятся, поскольку они унаследованы.

浏览器兼容性

The compatibility table in this page is generated from structured data. If you’d like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

Update compatibility data on GitHub

Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet Node.js
Chrome Full support 1 Edge Full support 12 Firefox Full support 1.5 IE Full support 9 Opera Full support 9.5 Safari Full support 3 WebView Android Full support ≤37 Chrome Android Full support 18 Firefox Android Full support 4 Opera Android Full support 10.1 Safari iOS Full support 1 Samsung Internet Android Full support 1.0 nodejs Full support 0.1.100

Примеры

Удаляет 0 элементов по индексу 2 и вставляет «drum»

var myFish = ;
var removed = myFish.splice(2, 0, 'drum');

// myFish равен  
// removed равен [], ничего не удалено

Удаляет 1 элемент по индексу 3

var myFish = ;
var removed = myFish.splice(3, 1);

// removed равен 
// myFish равен 

Удаляет 1 элемент по индексу 2 и вставляет «trumpet»

var myFish = ;
var removed = myFish.splice(2, 1, 'trumpet');

// myFish равен 
// removed равен 

Удаляет 2 элемента начиная с индекса 0 и вставляет «parrot», «anemone» и «blue»

var myFish = ;
var removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue');

// myFish равен  
// removed равен 

Удаляет 2 элемента начиная с индекса 2

var myFish = ;
var removed = myFish.splice(myFish.length - 3, 2);

// myFish равен  
// removed равен 

Удаляет 1 элемент по индексу -2

var myFish = ;
var removed = myFish.splice(-2, 1);

// myFish равен  
// removed равен s 

Удаляет все элементы после индекса 2 (включительно)

var myFish = ;
var removed = myFish.splice(2);

// myFish равен  
// removed равен 

Синтаксис

Параметры

Необязательный параметр. Указывает символы, используемые в качестве разделителя внутри строки. Параметр может быть как строкой, так и регулярным выражением. Если параметр опущен, возвращённый массив будет содержать один элемент со всей строкой. Если параметр равен пустой строке, строка будет преобразована в массив символов.
Необязательный параметр. Целое число, определяющее ограничение на количество найденных подстрок. Метод всё равно разделяет строку на каждом сопоставлении с разделителем , но обрезает возвращаемый массив так, чтобы он содержал не более элементов.

Описание

Объекты представляют коллекции значений, по которым вы можете выполнить обход в порядке вставки элементов. Значение элемента в  может присутствовать только в одном экземпляре, что обеспечивает его уникальность в коллекции .

Сравнение значений

Поскольку каждое значение в должно быть уникальным, сравнение значений основано на алгоритме «подобное значение»: равно  (несмотря на то, что ); все другие значения рассматриваются равными исходя из семантики оператора строго равенства ===. В ранних версиях черновика ECMAScript 6  и  считались разными (несмотря на то, что ), это было изменено в последующих версиях и адаптировано в Gecko 29 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) (баг 952870) и последней ночной сборке Chrome.  и также могут сохраняться в .

Запасний варіант (поліфіл)

Цей метод був доданий у ECMAScript 2015, тож, можливо, поки наявний не у всякій реалізації JavaScript. Проте, ви можете використати наступний код для забезпечення запасного варіанту :

// https://tc39.github.io/ecma262/#sec-array.prototype.find
if (!Array.prototype.find) {
  Object.defineProperty(Array.prototype, 'find', {
    value: function(predicate) {
     // 1. Нехай O дорівнює ? ToObject(this value).
      if (this == null) {
        throw new TypeError('"this" is null or not defined');
      }

      var o = Object(this);

      // 2. Нехай len дорівнює ? ToLength(? Get(O, "length")).
      var len = o.length >>> 0;

      // 3. Якщо IsCallable(predicate) дорівнює false, викинути виняток TypeError.
      if (typeof predicate !== 'function') {
        throw new TypeError('предикат має бути функцією');
      }

      // 4. Якщо надано thisArg, нехай T дорівнює thisArg; інакше нехай T дорівнює undefined.
      var thisArg = arguments;

      // 5. Нехай k дорівнює 0.
      var k = 0;

      // 6. Повторювати, поки k < len
      while (k < len) {
        // a. Нехай Pk дорівнює ! ToString(k).
        // b. Нехай kValue дорівнює ? Get(O, Pk).
        // c. Нехай testResult дорівнює ToBoolean(? Call(predicate, T, « kValue, k, O »)).
        // d. Якщо testResult дорівнює true, повернути kValue.
        var kValue = o;
        if (predicate.call(thisArg, kValue, k, o)) {
          return kValue;
        }
        // e. Збільшити k на 1.
        k++;
      }

      // 7. Повернути undefined.
      return undefined;
    }
  });
}

Якщо вам потрібно забезпечити підтримку вкрай застарілих рушіїв JavaScript, в яких відсутня підтримка , було б краще взагалі не додавати методів до  через відсутність можливості заборонити їх перебір.

JavaScript

JS Array concat() constructor copyWithin() entries() every() fill() filter() find() findIndex() forEach() from() includes() indexOf() isArray() join() keys() length lastIndexOf() map() pop() prototype push() reduce() reduceRight() reverse() shift() slice() some() sort() splice() toString() unshift() valueOf()

JS Boolean constructor prototype toString() valueOf()

JS Classes constructor() extends static super

JS Date constructor getDate() getDay() getFullYear() getHours() getMilliseconds() getMinutes() getMonth() getSeconds() getTime() getTimezoneOffset() getUTCDate() getUTCDay() getUTCFullYear() getUTCHours() getUTCMilliseconds() getUTCMinutes() getUTCMonth() getUTCSeconds() now() parse() prototype setDate() setFullYear() setHours() setMilliseconds() setMinutes() setMonth() setSeconds() setTime() setUTCDate() setUTCFullYear() setUTCHours() setUTCMilliseconds() setUTCMinutes() setUTCMonth() setUTCSeconds() toDateString() toISOString() toJSON() toLocaleDateString() toLocaleTimeString() toLocaleString() toString() toTimeString() toUTCString() UTC() valueOf()

JS Error name message

JS Global decodeURI() decodeURIComponent() encodeURI() encodeURIComponent() escape() eval() Infinity isFinite() isNaN() NaN Number() parseFloat() parseInt() String() undefined unescape()

JS JSON parse() stringify()

JS Math abs() acos() acosh() asin() asinh() atan() atan2() atanh() cbrt() ceil() cos() cosh() E exp() floor() LN2 LN10 log() LOG2E LOG10E max() min() PI pow() random() round() sin() sqrt() SQRT1_2 SQRT2 tan() tanh() trunc()

JS Number constructor isFinite() isInteger() isNaN() isSafeInteger() MAX_VALUE MIN_VALUE NEGATIVE_INFINITY NaN POSITIVE_INFINITY prototype toExponential() toFixed() toLocaleString() toPrecision() toString() valueOf()

JS OperatorsJS RegExp constructor compile() exec() g global i ignoreCase lastIndex m multiline n+ n* n? n{X} n{X,Y} n{X,} n$ ^n ?=n ?!n source test() toString() (x|y) . \w \W \d \D \s \S \b \B \0 \n \f \r \t \v \xxx \xdd \uxxxx

JS Statements break class continue debugger do…while for for…in for…of function if…else return switch throw try…catch var while

JS String charAt() charCodeAt() concat() constructor endsWith() fromCharCode() includes() indexOf() lastIndexOf() length localeCompare() match() prototype repeat() replace() search() slice() split() startsWith() substr() substring() toLocaleLowerCase() toLocaleUpperCase() toLowerCase() toString() toUpperCase() trim() valueOf()


С этим читают