【问题标题】:Get object values without looping [duplicate]在不循环的情况下获取对象值[重复]
【发布时间】:2013-05-19 19:56:35
【问题描述】:

我有以下对象:

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

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

可以使用jQuery

预期结果:

var output = [2, 6, 4];

【问题讨论】:

  • 你知道对象键吗?它们是静态的吗?
  • 如果底层 jQuery 使用循环可以吗?
  • 在某种程度上总是需要循环
  • Underscore JS 有一个功能:underscorejs.org/#values
  • 如果键是动态的(即未知的),那么没有循环就没有办法做到这一点。另请注意,对象属性没有固有的顺序,因此无法保证输出数组的值与您显示的顺序相同。 (您可以从对象中提取键并对它们进行排序,然后基于此生成最终输出,但您显示的输出不是基于字母顺序,所以...)

标签: javascript jquery object


【解决方案1】:
var arr = $.map(input,function(v){
 return v;
});

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

【讨论】:

  • 啊,快了几秒。
  • 这仍然是一个循环。效率低下,更何况
【解决方案2】:

如果没有循环,这根本不可能。还没有 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];
});

【讨论】:

  • 现在有 Object.values() 但它仍处于实验阶段,Google chrome 51.0 和 Firefox 47 支持该功能。请看developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • Object.values() 现在是所有最新浏览器(包括移动设备)的标准配置,但过时的 IE(所有版本)除外。
【解决方案3】:

您可以使用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 );

请注意:

这是一项实验性技术

由于该技术的规范尚未稳定,请查看compatibility table 了解在各种浏览器中的使用情况。另请注意,实验技术的语法和行为可能会随着规范的变化在未来版本的浏览器中发生变化。

所以,目前它只支持 Chrome 和 Firefox。

【讨论】:

  • 如果键是动态的,你怎么知道有多少个索引是硬编码的?
  • 最简单的方法。
【解决方案4】:

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

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

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

【讨论】:

  • 此正则表达式仅适用于未引用值的键值对,因为它也贪婪地吸收值。因此它适用于 OP 的示例,但不会泛化。
【解决方案5】:
var input = {
  'foo': 2,
  'bar': 6,
  'baz': 4
};
var newArr = new Array;
$.each(input,function(key,value) {
    newArr.push(value);
});
alert(newArr)

【讨论】:

  • each 仍然是一个循环。
  • 没有循环这是不可能的
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
相关资源
最近更新 更多