我试图删除一个数组部分。
不起作用
delete my_array[index];
确实有效
my_array.splice(index, 1);
当查看数组时,console.log中的两种情况看起来都很好,但第一种情况导致我的应用程序崩溃。
我不确定我使用的Vue是否对这些有不同的处理
为什么最后一个有效,而第一个无效
使用delete
运算符不会影响数组的长度,因为它会将该索引处的元素设置为undefined
。
new Vue({
data() { return { array: [1,2,3] } },
created() { delete this.array[1]; console.log(this.array[1]); }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
基于MDN文档,JavaScriptdelete
运算符从对象中删除属性。与第二个案例中建议使用splice
的页面部分Deleting array elements
相同。
或者delete
阵列元件
const arr = ['a', 'b', 'c'];
const deleteByIndex = (arr, index) => arr.filter((_, i) => i !== index);
console.log(deleteByIndex(arr, 1))
这与Vue中的更改检测工作方式有关。在创建对象时,会为每个属性创建getter和setter。一旦您更新它,就会检测到更改。
直接添加或删除会通过此系统,并会破坏您的应用程序。
此处对此进行了更详细的描述:https://v2.vuejs.org/v2/guide/reactivity.html