JavaScript 要设置的数组

JavaScript Array to Set

MSDN 引用了 JavaScript 的 Set 集合抽象。我有一个对象数组,我想将其转换为一个集合,以便我能够按名称删除 (.delete()) 各种元素:

var array = [
    {name: "malcom", dogType: "four-legged"},
    {name: "peabody", dogType: "three-legged"},
    {name: "pablo", dogType: "two-legged"}
];

如何将此数组转换为集合?更具体地说,是否可以在不遍历上述数组的情况下执行此操作?文档相对缺乏(对于实例化集来说足够了;如果可能的话,对于转换来说就足够了)。

我可能也在考虑转换为 Map,以便通过密钥删除。我想要完成的是一个可迭代的集合,可以通过主要通过键(而不是索引)访问元素来访问或修改它。

从一个数组到另一个数组的转换是最终目标。

只需将数组传递给 Set 构造函数即可。 Set 构造函数接受一个 iterable 参数。 Array 对象实现了 iterable 协议,因此它是一个有效参数。

var arr = [55, 44, 65];
var set = new Set(arr);
console.log(set.size === arr.length);
console.log(set.has(65));

See here

关于将它传递给构造函数的 levi 是正确的,但您也可以使用对象。

我觉得Veverke is trying to say is that you could easily use the delete keyword在一个对象上能达到同样的效果

我认为您对术语感到困惑; 是对象的组件,您可以将其用作命名索引(如果您想这样想的话)。

尝试这样的事情:

var obj = {
    "bob": "dole",
    "mr.": "peabody",
    "darkwing": "duck"
};

那么,你可以这样做:

delete obj["bob"];

对象的结构将是这样的:

{
    "mr.": "peabody",
    "darkwing": "duck"
}

效果相同

如果您开始时:

let array = [
    {name: "malcom", dogType: "four-legged"},
    {name: "peabody", dogType: "three-legged"},
    {name: "pablo", dogType: "two-legged"}
];

如果你想要一组名字,你会这样做:

let namesSet = new Set(array.map(item => item.name));

根据定义 "A Set is a collection of values, where each value may occur only once." 因此,如果您的数组有重复值,那么重复值中只有一个值将是已添加到您的集合。

var arr = [1, 2, 3];
var set = new Set(arr);
console.log(set); // {1,2,3}


var arr = [1, 2, 1];
var set = new Set(arr);
console.log(set); // {1,2}

因此,如果您的数组中有重复值,请不要转换为集合。