繁体   English   中英

使用 splice() 删除对象的数组元素

[英]Removing an object's array elements using splice()

下面我定义了一个对象,然后创建了一个 3x3 数组,其中每个元素都包含一个 myObject 的实例。 我期待函数 removeNumberFromArray迭代每个元素,因此每个对象并从名为 myNumbers 的数组中删除数字 32。 我的评论表明它实际记录到控制台的内容。 结果是一个空数组,我希望 9x9 数组中的每个对象都使 myNumbers 数组等于 [7,51,2,0,9]。

我看不出哪里出错了,我尝试将问题分解为更小的步骤,但 splice 似乎有效,有什么想法吗?

我将 VS Code 与 Liveserver Extension 与 Firefox 浏览器一起使用。

const myObject = {
    myNumbers: [7,32,51,2,0,9],
    myName: "John",
    myLastName: undefined,
    age: 26
};

for (i = 0; i <= 2; i++) {
    for (j = 0; j <= 2; j++) {
        myArray[i][j] = Object.create(myObject);
    }
}

function removeNumberFromArray(numberToRemove) {
    myArray.forEach(ele => {
        ele.forEach(square => {
            let index = square.myNumbers.indexOf(numberToRemove);
            square.myNumbers.splice(index, 1);
        })
    });
}

console.log(myArray[0][0].myNumbers); //[7, 32, 51, 2, 0, 9]
removeNumberFromArray(32);
console.log(myArray[0][0].myNumbers);   //[]

通过使用Object.create(myObject)您正在使用原型继承来创建一个从myObject继承的对象,这不是您要查找的对象。 我建议你创建一个小的“工厂”函数来生成这样的独特对象:

 const arrayLike = { length: 3 }; const myArray = Array.from(arrayLike, () => Array.from(arrayLike)); const objectFactory = () => ({ myNumbers: [7, 32, 51, 2, 0, 9], myName: "John", myLastName: undefined, age: 26 }); for (i = 0; i <= 2; i++) { for (j = 0; j <= 2; j++) { myArray[i][j] = objectFactory(); } } function removeNumberFromArray(numberToRemove) { myArray.forEach(ele => { ele.forEach(square => { let index = square.myNumbers.indexOf(numberToRemove); if(~index) square.myNumbers.splice(index, 1); }) }); } console.log(myArray[0][0].myNumbers); //[7, 32, 51, 2, 0, 9] removeNumberFromArray(32); console.log(myArray[0][0].myNumbers); //[]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM