要设置的JavaScript数组

要设置的JavaScript数组,javascript,arrays,set,Javascript,Arrays,Set,MSDN引用了JavaScript的集合抽象。我有一个要转换为集合的对象数组,以便能够按名称删除(.delete())各种元素: var array = [ {name: "malcom", dogType: "four-legged"}, {name: "peabody", dogType: "three-legged"}, {name: "pablo", dogType: "two-legged"} ]; 如何将此数组转换为集合?更具体地说,是否可以在不迭代上述数组

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

var array = [
    {name: "malcom", dogType: "four-legged"},
    {name: "peabody", dogType: "three-legged"},
    {name: "pablo", dogType: "two-legged"}
];
如何将此数组转换为集合?更具体地说,是否可以在不迭代上述数组的情况下执行此操作?文档相对缺乏(对于实例化的集合来说足够了;对于转换来说不够——如果可能的话)

我可能也在考虑将其转换为a,以便按键删除。我试图实现的是一个iterable集合,它可以通过主要通过键(而不是索引)访问或修改元素


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

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

var-arr=[55,44,65];
var集合=新集合(arr);
console.log(set.size==arr.length);
控制台日志(set.has(65))将其传递给构造函数是正确的,但也可以使用对象

我想你想说的是,你可以很容易地在一个物体上使用,以达到同样的效果

我想你被术语弄糊涂了;是对象的组件,您可以将其用作命名索引(如果您想这样想的话)

试着这样做:

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));
根据定义“集合是一组值,其中每个值只能出现一次。”因此,如果数组中有重复值,则重复值中只有一个值将添加到集合中

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。

听起来像是一个普通的旧对象对你有用…@Thomas:所以我缺少一些东西,我想学习一下。var s=new Set()、添加对象并发出s.delete(无论什么)-与var o={1:'aaa',2:'bbbb'…}和发出delete(o['1'])之间的区别是什么?@Veverke比最初的注释(+1)更具描述性。非常感谢。但是,同样,是否可以在不迭代数组的情况下将数组的内容添加到对象中,并保留类似列表的键可访问结构?听起来你有主意了。如果您有时间详细说明的话,我不介意以应答格式查看它。该数组对象是不合法的,因为
{“bob”,“dole”}
不是有效的对象。@Veverke ES6
Set
Map
是“纯”的这些数据结构的实现不会遇到
对象
在向其原型添加内容时可能遇到的问题。严格来说是正确的,尽管我自己犹豫是否添加答案,因为OP的数据格式不正确,因此不清楚他到底期望什么。这在IE11上不起作用。它不支持此构造函数。除非你知道你的用户将使用哪些浏览器,否则我会避免使用它。事实上,这开启了一个问题:“固定对象和普通对象之间的区别是什么?”?虽然,正如我在上面的评论中所指出的,“Set”是一种总结类型,它提供了“clear”的“很好的功能”。简而言之,我认为这篇文章的标题应该改为“javascript中Set对象和普通对象的区别是什么”,并注意“为了实现这个和那个。。。最后,我问自己…@Veverke“Set对象和普通对象之间的区别是什么”,你能读懂文档吗…@Hacketo:你发现除了Set之外,还有什么其他的api提供“Clear”吗?@Veverke
size
可能;一个普通对象可以有多个相同的值,集合不能。。。就像医生说的那样。所以如果你不想要一套,那么就不要使用一套?好建议。:-)感谢实用的
狗型
示例。