JS使用键但不使用值创建对象

4

使用for循环进行迭代时,更方便的做法是:

for (var key in obj){ key }

比这些更好的:
for (var i in array){ var key = array[i]; key }
for (var i = 0; i< array.length;i++){ var key = array[i]; key }

但很显然,声明数组更容易:

var array = ['key1', 'key2', 'key3']

var obj =   { key1:'',key2:'',key3:'' }

假设我只关心键而不关心顺序,有没有一种比上面更容易的方式来声明仅具有键而没有值的对象?我只是不喜欢使用

:'',    

看起来像一个奇怪的笑脸。

编辑: for-of 明显是正确的方法,只是现在还不行。


2
你可能只是在查看一个数组,对吧?如果值为空,为什么你还需要将其存储为对象呢? - Sushanth --
1
数组对你有什么问题吗? - forgivenson
2
就算是为了方便,也不应该使用for...in循环来遍历数组。 - Andy
对象是JS中用于键/值对的结构。如果您不想使用键/值对,请使用另一种结构,如数组。对于数组,您可以使用更方便的arr.forEach - Andy
@EricHartford 但是你并没有查找任何东西,因为你在对象中只存储键而不是值。 - forgivenson
显示剩余6条评论
2个回答

1
使用 lodash
var thing = ['a','b','c']
_.mapKeys(thing)
    Object {a: "a", b: "b", c: "c"}
_(thing).mapKeys().mapValues(_.constant(true)).value()
    Object {a: true, b: true, c: true}

对于( var key in _.mapKeys(thing) )? - lonewarrior556
如果你只想循环遍历这些值,你可以这样做:_.each(thing, function(n){// 对n进行一些操作}) - Eric Hartford
尝试坚持使用for循环:Python > Ruby - lonewarrior556

1
ES5的官方解决方法是使用内置于Array类型中的forEach方法,来避免这种烦恼。如果你正在使用一个数组而不是一个对象,它可以达到相同的目的,尽管看起来有些不同。
this.balls.forEach(function(ball) {
  this.space(ball);
}, this);

(this确保了正确的上下文环境)

在ES6中,使用箭头函数时,this就是:

this.balls.forEach(ball => {
  this.space(ball);
});

所有版本的JavaScript都将for k in o定义为一种迭代键的方式,而不是数组索引或值,因此除非您正在遍历字典的键,否则最好避免使用它。

遗憾的是,OP在问题中添加了这个编辑:“编辑:forEach不是答案,for-of肯定是正确的方法,只是现在还不行。” - Andy
@Andy 啊呀...我已经看过那个编辑了,但如果你反对某种方法的原因是其用词,那么你应该编写自己的语言,将你自己的偏好转化为另一种语言。ayCaramba! --> .substring( - Katana314

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接