I have a JavaScript 어레이입니다 다타라이 '어떤' 를 새로운 어레이입니다 '내가 원하는 푸시할 뉴어리'. 그러나 나는 't want to be', ' [0] # 39 don& 뉴어리 다타라이'. I want to 푸시인 모든 항목을 into the new 어레이입니다:
var newArray = [];
newArray.pushValues(dataArray1);
newArray.pushValues(dataArray2);
// ...
또는 더 좋다.
var newArray = new Array (
dataArray1.values(),
dataArray2.values(),
// ... where values() (or something equivalent) would push the individual values into the array, rather than the array itself
);
이제 새로운 어레이입니다 개별 데이터 값을 모두 들어 배열입니다. 그래서 내가 '있을 수 없다' 등 일부 대표 퍼시벌 주 don& # 39, 각 항목을 추가하는 반복할 다타라이 ',' one by one?
저작물의 어레이에는 않습니다를 큰 (http://otl. 단서 조항 아래) 이 있는 방법을 사용할 수 있습니다 () ',' 누름식 스토리지로는 프로파일링하려는 덮어쓰기/추가 값. '누름식 ()' 는 ' ()' 방식을 취할 수 있는 여러 매개 변수를 사용할 수 있도록 적용하십시오 배열에 전달하십시오 푸시할 값을 목록으로 함수은 매개변수입니다. 이를 사용하여 우위를 concat () '의' 추가 요소를 어레이입니다 새로 만드는 대신 배치하십시오 어레이입니다.
그러나 대규모 어레이에는 것으로 보인다 (훈장 100,000 명 이상의) , 이 전략은 실패할 수 있습니다. 이러한 루프를 사용한 어레이에는 가 더 나은 외곽진입. 자세한 내용은 https://stackoverflow.com/a/17368101/96100 참조.
var newArray = [];
newArray.push.apply(newArray, dataArray1);
newArray.push.apply(newArray, dataArray2);
이 붙여넣습니다 일반화할 기능을 할 수 있습니다.
function pushArray(arr, arr2) {
arr.push.apply(arr, arr2);
}
. & # 39 의 프로토타입 (prototype) '또는' 어레이입니다 추가합니다.
Array.prototype.pushArray = function(arr) {
this.push.apply(this, arr);
};
var newArray = [];
newArray.pushArray(dataArray1);
newArray.pushArray(dataArray2);
. 누름식 () 은 원래 '또는' 방법을 사용하여 여러 매개변수입니다 에뮬레이트합니다 있으므로 사실은 'like' 누름식 () ',', concat () 를 통해 여러 매개변수입니다:
Array.prototype.pushArray = function() {
this.push.apply(this, this.concat.apply([], arguments));
};
var newArray = [];
newArray.pushArray(dataArray1, dataArray2);
S # 39 마지막 예 here&, 루프 기반 브라우저 등 주요 대형 어레이에는 적합하며, 그리고 모든 버전의 IE < = 8:
Array.prototype.pushArray = function() {
var toPush = this.concat.apply([], arguments);
for (var i = 0, len = toPush.length; i < len; ++i) {
this.push(toPush[i]);
}
};
하나 더 추가 내아기마저도 " future-proof"; 회신과
Ecmascript 6 전파하므로 구문 에서 사용할 수 있습니다.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
let arr1 = [0, 1, 2];
let arr2 = [3, 4, 5];
arr1.push(...arr2);
console.log(arr1)
끝 - < 스니핏 >;!
아직 전파하므로 구문이 포함된 모든 주요 브라우저. 현재 호화성, 이 슬라이드에서는 (지속적으로 업데이트되는) [호환성에서는 표] [2].
그러나 전파하므로 문법을 사용할 수 있는 [바벨리아스] (https://babeljs.io/).
편집:
[2]: # test-spread_syntax_for_iterable_objects https://kangax.github.io/compat-table/es6/
매든 에서 세련된 방법으로 분석한 결과
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']
'또는' 전파하므로 연산자입니다 ES6 기능을 사용할 수 있습니다.
let fruits = [ 'apple', 'banana'];
const moreFruits = [ 'orange', 'plum' ];
fruits.push(...moreFruits); // ["apple", "banana", "orange", "plum"]
가장 단순한 다음 날 것 같다.
var newArray = dataArray1.slice();
newArray.push.apply(newArray, dataArray2);
Tpc. " push"; 수 많은 변수 '의' 기능을 사용할 수 있습니다 '방법' 누름식 인수만 적용하십시오 푸시할 다른 모든 요소는 어레이입니다. 이 구조 첫 번째 인수는 전화를 사용하여 푸시할 (" newArray"; 여기서) 를 " this"; 그리고 나머지 인수만 어레이입니다 요소가 있다.
이 '가 처음으로 내놓은 첫 번째 어레이로써, 그러니까' 이 사본을 슬라이스에 # 39, t 수정하십시오 don& 거잖나.
newArray.push(...dataArray2)
function pushArray(list, other) {
var len = other.length;
var start = list.length;
list.length = start + len;
for (var i = 0; i < len; i++ , start++) {
list[start] = other[i];
}
}
죄송합니다. 이스프레프 제출, 이제 그들은 내 벤크마크리제스 사용하여 결과를 받아들일 수 없다
Name | ops/sec | ± % | runs sampled
for loop and push | 177506 | 0.92 | 63
Push Apply | 234280 | 0.77 | 66
spread operator | 259725 | 0.40 | 67
set length and for loop | 284223 | 0.41 | 66
여기서
for 루프는 및 누름식 입니다.
for (var i = 0, l = source.length; i < l; i++) {
target.push(source[i]);
}
누름식 적용됩니다.
target.push.apply(target, source);
전파하므로 연산자:
target.push(...source);
여러 가지 질문에 대한 얘기를 아리스프로토티페이푸시자마카베리. 이것은 선택해제합니다 예:
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
<! - 언어: > js 랭 -; var dataArray1 = [1, 2]; var dataArray2 = [3, 4, 5]; var 뉴어리 = []; 아리스프로토티페이푸시자마카베리 (뉴어리, dataArray1); // 뉴어리 = [1, 2] 아리스프로토티페이푸시자마카베리 (뉴어리, dataArray2); // 뉴어리 = [1, 2, 3, 4, 5] 콘솔드로그 (제슨.스트린그리피 (뉴어리)); // 출력입니다: [1, 2, 3, 4, 5]
끝 - < 스니핏 >;!
Es6 경우 구문.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
var dataArray1 = [1, 2];
var dataArray2 = [3, 4, 5];
var newArray = [ ];
newArray.push(...dataArray1); // newArray = [1, 2]
newArray.push(...dataArray2); // newArray = [1, 2, 3, 4, 5]
console.log(JSON.stringify(newArray)); // Outputs: [1, 2, 3, 4, 5]
끝 - < 스니핏 >;!
Javascript 와 ES6 사용할 수 있습니다. 이를 근본적으로 작동자 비호환성의 전파하므로 연산자입니다 변환하십시오 어레이입니다 salesforce. 값. 그럼 이렇게 뭔가 할 수 있다.
const myArray = [1,2,3,4,5];
const moreData = [6,7,8,9,10];
const newArray = [
...myArray,
...moreData,
];
반면, 내가 알지 못하는 어떤 방식으로 어떻게 구문은 간결하게 오른길로 내부 및 성능에 영향을 미칠 대형 배열입니다.
, # 39 의 ES6 운행에서어떠한 Here&
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
var newArray = [];
let dataArray1 = [1,2,3,4]
let dataArray2 = [5,6,7,8]
newArray = [...dataArray1, ...dataArray2]
console.log(newArray)
끝 - < 스니핏 >;!
대부분의 경우, 위의 방법은 > 상황보고해 움직일만 합니다 ',' concat 않을 경우, 그리고 여러분이 desktopplatforms 고려해보십시오 수백 수천 개의 항목을 배열입니다.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
let dataArray1 = [1,2,3,4]
let dataArray2 = [5,6,7,8]
let newArray = dataArray1.concat(dataArray2);
console.log(newArray)
끝 - < 스니핏 >;!
그래서 이런 미삭 내 미래를 위해 성능 없는 것이 아니라, 이 특정 览侩 荤례 아리스프로토티페이푸시 아리스프로토티페이콩카t. 에 위치해 있다. & # # # # # # 120319 120302 120313 120278, & # 120307 120310,,, & # 120310, & # & 120304, & # &, & # # # # 120316 120310 120321 120302, & # 120320 120315,,,,, & # # # # # # 120319 120302 120317 120294, &, &, &, & 120306. & # # # # # 120302 120319 120319 120276, & # 120320 120326,,,,, 단지 특정 어레이입니다 때 명이 실종되었다. 예를 들면 다음과 같습니다. <! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
// This is just as an example. In actual code,
// do not mix different types like this.
var mySparseArray = [];
mySparseArray[0] = "foo";
mySparseArray[10] = undefined;
mySparseArray[11] = {};
mySparseArray[12] = 10;
mySparseArray[17] = "bar";
console.log("Length: ", mySparseArray.length);
console.log("0 in it: ", 0 in mySparseArray);
console.log("arr[0]: ", mySparseArray[0]);
console.log("10 in it: ", 10 in mySparseArray);
console.log("arr[10] ", mySparseArray[10]);
console.log("20 in it: ", 20 in mySparseArray);
console.log("arr[20]: ", mySparseArray[20]);
끝 - < 스니핏 >;! 또한 쉽게 초기화하려면 스페어를 어레이에는 javascript 있습니다.
var mySparseArray = ["foo",,,,,,,,,,undefined,{},10,,,,,"bar"];
& # # # # # # 120302 120319 120319 120276, &, &, & # # # 120310,,, - & 120326, & # 120306, & # & 120287 비트& 120312 120320. 적어도 '길이' 는 한 개체의 속성을 가진 같은 어레이입니다 없었다 ',' new [] '또는' 어레이입니다 함께 초기화되었습니다 예를 들어, 아래의 객체에는 같은 어레이입니다 분류된다. <, pre>, {0: foo" ";, 1: ,, /pre> < " bar" 길이 2} < pre> document.body.children< /pre>;;; (3), 새로운 Uint8Array < /pre> pre> <;;
var slice = Array.prototype.slice;
// For arrays:
console.log(slice.call(["not an array-like, rather a real array"]));
// For array-likes:
console.log(slice.call({0: "foo", 1: "bar", length:2}));
console.log(slice.call(document.body.children));
console.log(slice.call(new Uint8Array(3)));
console.log(slice.call( function(){return arguments}() ));
끝 - < 스니핏 >;!
var empty = [];
// For arrays:
console.log(empty.concat(["not an array-like, rather a real array"]));
// For array-likes:
console.log(empty.concat({0: "foo", 1: "bar", length:2}));
console.log(empty.concat(document.body.children));
console.log(empty.concat(new Uint8Array(3)));
console.log(empty.concat( function(){return arguments}() ));
끝 - < 스니핏 >;! [1]: q = 캐시 mjf9y9zttg8j https://webcache.googleusercontent.com/search https://jsperf.com/concatenating-two-arrays-together? [2]: q = 캐시 z1whla78q5uj https://webcache.googleusercontent.com/search https://jsperf.com/concatenating-two-sparse-arrays?
어레이입니다 a 와 b 두 가지가 있습니다. 무슨 짓을 한 코드 값은 슬라이드에서는 어레이입니다 끼워졌는지 배열로 b.
let a = [2, 4, 6, 8, 9, 15]
function transform(a) {
let b = ['4', '16', '64']
a.forEach(function(e) {
b.push(e.toString());
});
return b;
}
transform(a)
[ '4', '16', '64', '2', '4', '6', '8', '9', '15' ]
원래 배열을 수정할 경우 및 누름식 배치할 수 있습니다.
"'javascript var 소스 = [1, 2, 3]; var 범위 = [5, 6, 7]; var 길이 = 수르시오푸쉬 (그레인지);
콘솔드로그 (소스). [1, 2, 3, 5, 6, 7] // 콘솔드로그 (길이 (length). 6 // "'
이 같은 유형의 들어갈 수 있도록 스케쳐내 항목만 '원본' 어레이입니다 아닌 혼합 번호 및 문장열 예를 들어), 그러면 타입스크립트.
"'타입스크립트 /*