假设我有这样的代码:

var myArray = new Object();
myArray["firstname"] = "Bob";
myArray["lastname"] = "Smith";
myArray["age"] = 25;

现在如果我想删除“lastname”?....有什么等价物吗 (“姓”)myArray .remove () ?

(我需要元素消失,因为元素的数量很重要,我想保持东西干净。)


当前回答

我唯一的工作方法是:

function removeItem (array, value) {
    var i = 0;
    while (i < array.length) {
        if(array[i] === value) {
            array.splice(i, 1);
        } else {
            ++i;
        }
    }
    return array;
}

用法:

var new = removeItem( ["apple","banana", "orange"],  "apple");
// ---> ["banana", "orange"]

其他回答

在Airbnb风格指南(ECMAScript 7)中有一种优雅的方式来做到这一点:

const myObject = {
  a: 1,
  b: 2,
  c: 3
};
const { a, ...noA } = myObject;
console.log(noA); // => { b: 2, c: 3 }

版权:https://codeburst.io/use-es2015-object-rest-operator-to-omit-properties-38a3ecffe90

通过使用“delete”关键字,它将从JavaScript中的array中删除array元素。

例如,

考虑以下陈述。

var arrayElementToDelete = new Object();

arrayElementToDelete["id"]           = "XERTYB00G1";
arrayElementToDelete["first_name"]   = "Employee_one";
arrayElementToDelete["status"]       = "Active";

delete arrayElementToDelete["status"];

代码的最后一行将从数组中删除键为“status”的数组元素。

如果你想要一个更实用和优雅的方法,你可以这样做:

const o = { firstName: "foo", lastName: "bar" };
const { lastName, ...removed } = o;
lastName // bar
removed // { firstName: "foo" }

注意,如果对象中没有剩余项,则remove的值将是未定义的。

如果,出于某种原因,删除键不起作用(就像它对我不起作用一样),你可以将它拼接出来,然后过滤未定义的值:

// To cut out one element via arr.splice(indexToRemove, numberToRemove);
array.splice(key, 1)
array.filter(function(n){return n});

不要尝试连接它们,因为拼接返回删除的元素;

你可以通过显式地将一个条目分配给'undefined'来从你的映射中删除它。就像你的情况:

myArray[“lastname”] = undefined;