12

我有以下对象:

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

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

可以使用jQuery.

预期结果:

var output = [2, 6, 4];
4

5 回答 5

8
var arr = $.map(input,function(v){
 return v;
});

演示--> http://jsfiddle.net/CPM4M/

于 2013-05-24T09:03:12.990 回答
6

如果没有循环,这根本不可能。(还)没有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];
});
于 2013-05-24T09:09:08.623 回答
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。

于 2013-05-24T09:11:57.397 回答
3

我不知道你为什么想要没有 loop 。这是我的解决方案

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

它打印[2, 6, 4]。我没有测试其他 json 值

于 2013-05-24T09:20:42.653 回答
-2
var input = {
  'foo': 2,
  'bar': 6,
  'baz': 4
};
var newArr = new Array;
$.each(input,function(key,value) {
    newArr.push(value);
});
alert(newArr)
于 2013-05-24T09:02:19.347 回答