2017-09-13 10 views
0

배열에서 요소의 범위를 제거 결과 :자바 스크립트 나 배열에서 요소의 범위를 제거 할

["Banana", "Orange1", "Orangex"] 

왜 이런 일이 발생합니까?

더 빠르고 더 좋은 방법이 있습니까?

+3

것을보십시오. 첫 번째 매개 변수는 항목 수를 정의하고 두 번째 매개 변수는 시작 인덱스를 정의합니다. – Leth

+6

['array.splice (start, deleteCount)'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) 두 번째 매개 변수는 인덱스가 아닙니다. . – Cerbrus

답변

2

Array.prototype.splice()의 두 번째 매개 변수는 제거 할 요소의 수이며 끝 인덱스가 아닙니다. 에서

매개 변수

start 지수 (원산지 0) 배열을 변화 시작 :

당신은 그 Array.prototype.splice() MDN Reference에서 볼 수 있습니다. 배열의 길이보다 큰 인 경우 실제 시작 인덱스는 이 배열 길이로 설정됩니다. 음수 인 경우 배열 끝 (원점 1)에서 많은 개의 요소를 시작하고 절대 값이 배열의 길이보다 큰 경우 0으로 설정됩니다.

deleteCount 선택 사항 제거 할 기존 배열 요소의 수를 나타내는 정수입니다. deleteCount가 0이면 요소가 제거되지 않습니다. 이 경우 최소한 하나 이상의 새 요소를 지정해야합니다. deleteCount 이 start에서 시작하는 배열에 남아있는 요소 수보다 크면 배열 끝까지의 모든 요소는 이 삭제됩니다.

솔루션 :

당신은이 두 지표 사이의 요소의 수를 계산하기 때문에 정확한 수를 얻을 수 b-a+1를 사용해야합니다.

데모 :

입니다 코드를 어떻게해야 :

var fruits = ["Banana", "Orange1", "Apple", "Banana", "Orange", "Banana", "Orange", "Mango", "Bananax", "Orangex"]; 
var a = fruits.indexOf("Apple"); 
var b = fruits.indexOf("Mango"); 

//returns items not equal to a or b 
function fruitfilter(item, index){ 
return index !== a && index !== b; 
} 

//apply the filter to the array, returns a new array 
var newfruits = fruits.filter(fruitfilter); 
//log the new fruits 
console.log(newfruits); 

은 다음과 같습니다

var fruits = ["Banana", "Orange1", "Apple", "Banana", "Orange", "Banana", "Orange", "Mango", "Bananax", "Orangex"]; 
 
var a = fruits.indexOf("Apple"); 
 
var b = fruits.indexOf("Mango"); 
 

 
var removedFruits = fruits.splice(a, b-a+1); 
 

 
console.log(fruits);

1

여기 필터와 함께 할 수있는 하나의 방법입니다 아즈 sfiddle : link

0

배열 때문에 발생합니다.() 삭제하려는 첫 번째 인덱스 및 요소의 수를 가지고 스플 라이스하지 마지막 인덱스 당신은 제대로 스플 라이스 기능을 사용하지 않는

fruits.splice(a, b - a + 1);