获取对象值的方法,无需循环遍历

13

我有以下对象:

var input = {
  'foo': 2,
  'bar': 6,
  'baz': 4
};

这个对象是否可以在不循环的情况下获取值?

可以使用 jQuery

期望的结果:

var output = [2, 6, 4];

你知道对象键吗?它们是静态的吗? - Kasyx
在底层中使用循环的jQuery是否可以接受? - Dovydas Navickas
7
循环在某个层面上总是必要的。 - Alex K.
Underscore JS有一个相应的函数:http://underscorejs.org/#values - Markus Hedlund
2
如果键是动态的(即未知的),那么没有办法在不使用循环的情况下完成此操作。还要注意对象属性没有固有的顺序,因此无法保证输出数组中的值按照您显示的顺序排列。(您可以从对象中提取键并对其进行排序,然后根据此生成最终输出,但您显示的输出不是基于字母顺序的,所以...) - nnnnnn
5个回答

8

1
啊,被几秒钟打败了。 - elclanrs
6
那仍然是一个循环,一个低效的循环,更何况。 - Ven

8

如果没有循环,这是不可能的。目前还没有Object.values()方法来补充Object.keys()

在此之前,您基本上只能使用以下结构:

var values = [];

for (var k in input) {
  if (input.hasOwnProperty(k)) {
    values.push(input[k]);
  }
}

或者,在现代浏览器中(但当然仍然使用循环和匿名函数调用):
var values = Object.getOwnPropertyNames(input).map(function(key) {
    return input[key];
});

1
现在有Object.values(),但它仍处于实验阶段,只有谷歌Chrome 51.0和Firefox 47支持该函数。请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values - Tolani
Object.values()现在已经成为所有最新浏览器(包括移动端)的标准,唯一的例外是已经过时的IE浏览器(所有版本)。 - Studocwho

4
您可以使用Object.values()方法从此对象中获取值,而无需循环,例如:
var output = Object.values( input );
console.log( output );  // [2, 6, 4]

演示:

var input = {
  'foo': 2,
  'bar': 6,
  'baz': 4
};

var output = Object.values( input );
console.log( output );

请注意:
这是一项实验性技术。由于规范尚未稳定,建议在各种浏览器中使用 兼容性表格 进行检查。同时注意,实验性技术的语法和行为可能会因规范的变化而在浏览器的未来版本中发生改变。
目前仅支持 Chrome 和 Firefox。

4
如果这些键是动态的,那么您如何确定有多少个键来硬编码索引? - nnnnnn
最简单的方法。 - Zia Yamin

3

我不知道为什么你想要不用循环。这是我的解决方案:

JSON.stringify( input ).replace(/"(.*?)"\:|\{|\}/g,'' ).split(',')

it打印出[2, 6, 4]。我没有测试其他JSON值。


这个正则表达式仅适用于键-值对中的值未被引号括起来的情况,因为它会贪婪地吸收值。因此,它将适用于 OP 的示例,但不会推广到其他情况。 - Dean Stamler

-2
var input = {
  'foo': 2,
  'bar': 6,
  'baz': 4
};
var newArr = new Array;
$.each(input,function(key,value) {
    newArr.push(value);
});
alert(newArr)

each 仍然是一个循环。 - hsz
这是不可能的,没有循环。 - Manish Jangir

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