2016-08-01 2 views
-1

인덱스를 통해 배열에서 특정 요소를 제거하기위한 데모를 작성했습니다. splice() 사용 전후에 결과 배열 얻기

Array.prototype.splice()

var splice_a = function (array, index) { 
 
    array.splice(index, 1); 
 
    return array 
 
}; 
 

 
var splice_b = function (array, index) { 
 
    return array.splice(index, 1) 
 
}; 
 

 
var test = function() { 
 
    var array = [1, 2, 3]; 
 
    
 
    alert(splice_a(array, 1)); 
 
    alert(splice_b(array, 1)); 
 
};
<button onclick="test()">Click me</button>
return value에 대해 말한다 :

배열이 삭제 된 요소를 포함. 하나의 요소가 인 경우 하나의 요소의 배열이 반환됩니다. 요소가 제거되지 않으면 빈 배열이 반환됩니다.

결과 배열을 가져 오려면 키워드 return과 결합해야하나요? 나는 2 차 결과를 얻고 있기 때문에

이 경우이어야한다 :

1,3

3

내 질문 :이 경우 return array.splice(index, 1) 일어날 무엇?

+0

예, 당신은 당신이 함수가 값을 반환 할 경우 값으로'return' 키워드를 사용해야합니다. – Malk

+0

나는 당신이 여기에서 오해하고있는 것을 보지 못했습니다. 게시 한 코드 스 니펫은 MDN에서 설명한 것과 동일한 동작을 보여줍니다. 'Array.prototype.splice'의 결과를 돌려 주면 원래 배열이 아닌 제거 된 배열을 얻을 수 있습니다. – Damon

+0

@Damon 내 질문을 읽어 보셨습니까? 같은 행동이지만 2 가지 차이가 ​​있습니다. –

답변

1

여기에 무슨 일이 일어나고 있는지의 추상적 인 예이다. 모든 Array.prototype 메서드는 배열을 반환하지 않습니다. 예를 들어, 은 원래 배열을 반환하지 않습니다. 이것은 당신이 무엇을하려고 유사하다 :

function foo_a(arr) { 
    // call foo, removes element from arr. 
    arr.foo() // We do not return here so the fact that foo returns 1 is not used. 
    return arr 
} 

function foo_b(arr) { 
    // call foo, removes element from arr. 
    return arr.foo() // We return the return value of foo here, which is 1 
} 

var arr = [1, 2, 3, 4]; 

foo_a(arr) // [1, 2, 3] 
foo_b(arr) // 1 

TL을, 박사 return arr.foo()는 기본적으로 관계없이 배열에 수행 이제까지 다른 것을 항상 1 "foo는의 반환 값을 반환"말하고 .

+0

내 상상력이 좋아. 많은 감사합니다! –

+0

@Happy 코딩에 문제가 없습니다. 기꺼이 도와 드리겠습니다! 생각할 수있는 또 다른 방법은 숫자를 반환하는 것 외에는 아무것도하지 않는 함수가 있다고 가정 해보십시오. 이 함수를 다른 함수에서 무작위로 호출하면 리턴 값이 사용되지 않으므로 아무런 효과가 없습니다. 그러나 함수를 반환하면 외부 함수는 반환 값을 사용하여 해당 숫자를 반환합니다. – Damon

+0

스파게티처럼 말도 안돼요. ( –

1

결과 배열은 사용자 고유의 배열입니다. 다시 돌려 줄 필요는 없습니다. 그래서 그냥 다음과 같습니다

var splice_a = function (array, index) { 
    array.splice(index, 1); 
    return array 
}; 
var array = [1, 2, 3, 4]; 

splice_a(array, 1); 
alert(array) //will show 1,3,4; 

splice_a(array, 1); 
alert(array) //will show 1,4; 
1

Array.prototype.splice가 배열로 배열 반환 제거 값의 m 인덱스에서 n 데이터를 제거합니다 : 귀하의 상황에 따라서

var m = 2, 
 
    n = 3; 
 
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 
 
var removedValues = arr.splice(m, n); 
 

 
console.log(arr, removedValues);

그 배열 (인덱스 값)에서 하나의 요소를 제거하고 새로운 배열로 반환합니다.

// a function that removes the last element from an array, and returns 1 
Array.prototype.foo = function() { 
    this.pop() 
    return 1 
} 

// a function that removes the last element from an array, and returns the array 
Array.prototype.bar = function() { 
    this.pop() 
    return this 
} 

같은 일이 arr에 일어날 것 arr.foo() 또는 arr.bar()를 호출한다면, 당신은 호출하는 기능을하지만 반환 값이 다릅니다

1

반환 값의 차이를 표시하도록 함수를 수정했습니다. 모두 동일한 방식으로 전달 된 배열을 변경합니다. 변경되는 유일한 것은 반환 값입니다. 이것은 혼란 스러울 수도 있습니다.array 변수는 splice_b을 실행하기 전에 splice_a에 의해 변경됩니다.

var splice_a = function (array, index) { 
 
    var removed = array.splice(index, 1); 
 
    console.log(` Removed = ${removed}`); 
 
    console.log(` Array = ${array}`); 
 
    
 
    return array; 
 
}; 
 

 
var splice_b = function (array, index) { 
 
    var removed = array.splice(index, 1) 
 
    console.log(` Removed = ${removed}`); 
 
    console.log(` Array = ${array}`); 
 
    
 
    return removed; 
 
}; 
 

 
var array = [1, 2, 3]; 
 

 
console.log(`Array before splice_a: ${array}`); 
 
splice_a(array, 1); 
 

 
console.log(`Array before splice_b: ${array}`); 
 
splice_b(array, 1); 
 

 
console.log(`Final value of array: ${array}`);
당신은 어쨌든 변화의 경우는 값을 반환 할 이유에 관해서는

. 이것은 주로 체인 명령의 편의를위한 것입니다. 바로 첫 번째 함수를 고려
var splice_a1 = function (array, index) { 
 
    var removed = array.splice(index, 1); 
 
    return array; 
 
}; 
 
var splice_a2 = function (array, index) { 
 
    var removed = array.splice(index, 1); 
 
}; 
 

 

 
var array = [1, 2, 3]; 
 
// This will run, because splice_a1 returns an array 
 
splice_a1(array, 1).forEach(_ => console.log(_)) 
 

 
// This will throw an error, because <undefined> does not have a forEach() 
 
splice_a2(array, 1).forEach(_ => console.log(_))

+0

예를 여러 번 읽었습니다. 설명하는 내용을 이해합니다. 그러나 예에서 '최종 값'은 '1'대신에 '3'입니다. 차이점을 찾는 중입니다. –

+0

'alerts()'를 삭제했지만, 다시 넣어 주면 같은 결과를 얻을 것입니다 .' splice_b'는'removed' 값을 반환하고 있습니다. 3. – Malk

+0

ya. 차이점은'splice_a'입니다. 배열을 반환하고'splice_b'가 원소 ('removed value')를 반환하면됩니다. 오른쪽? –