如何从 JavaScript 中的“Set”对象获取单个键值?

Jit*_*har 4 javascript ecmascript-6

我有带有三个键值的 Set() 对象

var myset =new Set();
myset.add('first','This is first value');
myset.add('second','This is second value');
myset.add('third','This is third value');
Run Code Online (Sandbox Code Playgroud)

使用循环我可以获得这三个键的值

for( var value of myset){
  console.log(value);
}
Run Code Online (Sandbox Code Playgroud)

怎样才能获得个人价值?我想获得第二个价值键?

有什么选择吗?

我试过这些但没有用

myset.get('second');
myset(1);
Run Code Online (Sandbox Code Playgroud)

var myset =new Set();
myset.add('first','This is first value');
myset.add('second','This is second value');
myset.add('third','This is third value');
Run Code Online (Sandbox Code Playgroud)

Est*_*ask 7

Set是一组值,而不是它们的映射,因此add接受 1 个参数,这是一个值。你要找的东西是Map

这个答案中解释了通过其索引获取值,并且对于Set和都是相同的Map。应该迭代一个集合,直到达到索引。这可以通过首先将其转换为数组来以较低效率的方式完成:

const map = new Map();
map.set('first','This is first value');
map.set('second','This is second value');
map.set('third','This is third value');

console.log(map.get('second') === 'This is second value'); // true
console.log([...map.values()][1] === 'This is second value'); // true
Run Code Online (Sandbox Code Playgroud)

  • @BrDaHa 我的观点是它不仅仅是一个实现,这种行为是严格指定的。另一方面,所有现代引擎中都实现了对象文字来维持顺序,但规范并不能保证这一点。 (2认同)

ale*_*lex 1

你用Set错了。它不是键/值存储,而是唯一值的列表。

来源

你的代码...

var myset =new Set();
myset.add('first','This is first value');
myset.add('second','This is second value');
myset.add('third','This is third value');
Run Code Online (Sandbox Code Playgroud)

实际上是创建一组值"first", "second", "third"(第二个参数被忽略,因为Set.prototype.add()只接受一个参数)。

对于通用键/值存储,您应该使用 Map 或常规 JavaScript 对象(取决于您支持的环境)。

地图

映射允许您存储键/值对,其中键可以是任何类型。这与常规 JS 对象不同,常规 JS 对象的键必须是字符串类型。

const myMap = new Map();
myMap.set('key', 'value');
Run Code Online (Sandbox Code Playgroud)

常规 JS 对象

您可以使用常规 JS 对象,因为您的键是字符串,最好具有null可用的原型Object.create(null)null原型确保您不会在不进行检查的情况下读回原型链上的任何其他值Object.prototype.hasOwnProperty())。