2016-10-07 321 views
0

是否有可能通過它的值從數組中除去對象,而不是通過沒有使用for循環進行迭代的索引?Vue:如何從數組中刪除對象的值?

我試圖用重複刪除元素,但它看起來像它不刪除重複的元素:

App.$refs.userContent.foo : [1,2,3,4] 
console.log(App.$refs.userContent.foo); 
App.$refs.userContent.foo.forEach(function(x,i) 
{ 
App.$refs.userContent.foo.$remove(i); 

}); 
console.log(App.$refs.userContent.foo); 

結果:

[1, 2, 3, 4, __ob__: Observer]

[3, 4, __ob__: Observer]

爲什麼它的做不刪除所有元素?

回答

1

當您從數組中移除元素時,您將更改剩餘元素的索引。如果你想刪除所有的元素,你會做你的.forEach()裏面的以下內容:

// Keep removing first array element until they're all gone 
App.$refs.userContent.foo.$remove(0); 

...但是這將是奇怪的空數組。

要回答你原來的問題 - 不可以。你不能通過它的值在一個步驟中刪除數組元素。您首先必須找到元素的索引,然後通過索引刪除它。在香草JS,你可以使用.splice()通過其索引中刪除一個元素:

// Remove 4th element from array 
myArray.splice(3, 1); 
+0

它是不錯的代碼?對於(i = 0; i <= z; i ++) ' var z = App. $ refs.userContent.foo.length {.refs.userContent.foo。$ remove(i); }'? –

+0

不,如果你真的想用這種方法清除數組,你需要向後循環:for(i = App。$ refs.userContent.foo.length - 1; i> = 0; i--){ –

0

您可能想使用過濾功能。例如:

[1,2,3,4].filter(x => x != 2) 

從它的值是2

+0

我能做些什麼例如:'App。$ refs.userContent.foo = App。$ refs.userContent.foo.filter(x => x!= 2)' –

0

它遍歷數組找到你想要的值刪除的元素數組中刪除的項目。所以答案是否定的。

你也許可以欺騙它來欺騙你如何做到這一點,但最終它仍然必須找到你想要刪除的值的元素。有一些方法可以優化搜索,雖然數組是排序的。

0

在Vue 1中有一個$remove方法在你可以傳遞參考的數組上。

this.items.$remove(item) 

我認爲這已經在Vue 2中消失了。您可以使用indexOf而不是循環。例如:

var index = this.items.indexOf(item); 
if (index > -1) { 
    this.items.splice(index, 1) 
} 
0

我有同樣的問題,我解決它投入:關鍵在V爲