JavaScript数组设置

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

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

我如何将这个数组转换为一个集?更具体地说,是否有可能在不遍历上述数组的情况下做到这一点?文档相对缺乏(对于实例化集来说足够了;如果可能的话,不用于转换)。

我可能也在考虑转换为地图,用于按键删除。我试图完成的是一个可迭代的集合,可以通过访问主要通过键(而不是索引)的元素来访问或修改。

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

312414 次浏览

只需将数组传递给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 . See here

利瓦伊 关于将它传递给构造函数的内容是正确的,但你也可以使用对象。

我认为Veverke想说的是,你可以很容易地在对象上使用delete关键字来达到同样的效果。

我觉得你们被术语搞糊涂了;属性是对象的组件,你可以用它作为命名索引(如果你想这么想的话)。

试试这样做:

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

因此,如果你的数组有重复值,那么在重复值中只有一个值会被添加到你的Set中。

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}

所以,如果数组中有重复的值,不要转换为set。

var yourSetAsArray = Array.from(new Set([1, 2, 2, 3, 3, 4, 4]));
// returns [1, 2, 3, 4]