Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript splice()返回我要消除的项,而不是数组减去该项_Javascript_Typescript - Fatal编程技术网

Javascript splice()返回我要消除的项,而不是数组减去该项

Javascript splice()返回我要消除的项,而不是数组减去该项,javascript,typescript,Javascript,Typescript,我正在尝试使用indexOf()和建议的splice()技术从数组中删除项。这就是正在发生的事情 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]

我正在尝试使用
indexOf()
和建议的
splice()
技术从数组中删除项。这就是正在发生的事情

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]
这并不是我所看到的每一篇文章都说应该发生的事情。有人能解释一下吗

更新
我在我的代码中发现了这个问题,当时我只得到了一个我期望更多的结果,并将它追溯到这一点。

因为当你拼接一个数组时,你是在变异它,这意味着你在改变原始数组。将结果(从数组中拼接的元素)存储在此处创建的“newArray”变量中。因此:

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

var mine = arr.splice(1, 1);
console.log(mine);
console.log(arr);
如果我们将arr打印到控制台,将返回原始的光线减索引1,如果我们将我的光线减索引打印到控制台,将返回[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];


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);

通过这种方式,您可以删除任何索引,或者传递一个函数和条件,您可以使用这些函数和条件来确定是否应该删除索引,而无需通过使用函数编程更改原始数组的顶级结构。下划线模块中还有一些函数可以在这种情况下帮助您。

Splice会改变原始数组并返回删除的项。您操作的阵列已更改。改为记录someArray,您将看到结果。Slice是不会变异的运算符。实际上,我将
newArray
传递到一个函数中,该函数接收一个包含1项的数组,这是我想要删除的项。只需删除赋值即可。只需在数组上运行splice并返回它。在同一数组中的splice项目将被删除后,您无需进行赋值。您可以通过该操作。是的,我决定只创建一个
forEach()
,并将除要排除的索引之外的所有内容存储在新变量中,然后从那里开始工作。谢谢:)
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);