javascript - array.splice() 返回我要消除的项目,而不是数组减去项目
问题描述
indexOf()
我正在尝试使用建议的withsplice()
技术从数组中删除一个项目。这就是正在发生的事情
let someArray: string[] = [first, second, third, fourth, fifth, sixth];
let newArray: string[] = someArray.splice(3, 1);
console.log(newArray);
//deisred result = [first, second, third, fifth, sixth]
//result I'm getting = [fourth]
这并不是我遇到的几乎每一篇文章都说应该发生的事情。有人可以解释一下吗?
更新 我在我的代码中发现了这个问题,当时我只看到了 1 个我期望更多的结果,并将其追溯到这一点。
解决方案
因为当你拼接一个数组时,你正在改变它,这意味着你正在改变原始数组。您将结果(您从数组拼接的元素)存储在您在此处创建的“newArray”变量中。所以这:
var arr = [1, 2, 3, 4];
var mine = arr.splice(1, 1);
console.log(mine);
console.log(arr);
如果我们将 arr 打印到控制台,将返回原始射线减去索引一,如果我们将我的打印到控制台,将返回 [2]。要获得您期望的输出,您必须执行不同的操作,例如遍历数组并以不同的方式使用拼接。这是一个例子:
var arr = [1, 2, 3, 4];
var mine = [];
for(var i = 0; i < arr.length; i++) {
if(i !== 3) {
mine.push(arr[i]);
}
}
现在我没有改变原始数组,我只是将元素推送到一个新数组。
但是,如果您想简单地改变原始数组而不是将新数组存储在某种变量中,您可以简单地拼接原始数组:
var arr = [1, 2, 3, 4];
arr.splice(3, 1);
console.log(arr);
但是,如果你将它传递给一个函数,我可能不会在函数之外改变一个数组,我只需返回一个值并将该值存储在一个新变量中:
var arr = [1, 2, 3, 4];
function deleteIndex(ar, i) {
var a = [];
ar.forEach(function(elt, index) {
if(index === i) {
}
else {
a.push(elt);
}
});
return a;
}
var newArr = deleteIndex(arr, 3);
console.log(newArr);
通过这种方式,您可以删除任何索引,或传递您想要用来确定是否应删除索引的函数和标准,而无需通过使用函数式编程更改原始数组的顶级结构。如果是这种情况,下划线模块中还有一些功能可以帮助您。
推荐阅读
- mysql - 如何获取行组的最大日期
- groovy - 将引号(“”)添加到groovy中的值
- r - 具有应用功能的高效 rbind 替代方案
- python - 熊猫:read_json 更改数据
- rest - PATCH 请求的 HTTP 状态代码,意思是“你不能发出这样的请求”
- json - 将计算字段与当前日期进行比较
- asp.net-mvc - Visual Studio 2017 - 发布菜单中缺少的单个文件
- json - 无需在 Swift 中关闭应用程序即可重新加载 parsedurl
- html - 网页宽于所有屏幕,包括桌面
- c++ - 如何防止被shared_ptr破坏的捕获的“this”的悬空指针?