8

prototypeJS 库有一个 Object.values() 方法,它返回对象中的值数组。

例如:

 var myObj = {
   "key1" : "val1"
   "key2" : "val2"
 }
 Object.values(myObj) //returns ["val1", "val2"]

有没有做同样事情的jQuery方法?

4

4 回答 4

14

我认为没有直接的方法,但您可以使用$.map()

$.map(myObj, function(val, key) { return val; }); //returns ["val1", "val2"]

(请注意,如果回调返回nullundefined对于给定属性,则该项目将不会包含在新数组中,因此如果您的对象可能具有具有这些值的属性,则必须以另一种方式进行。从不过,用一个for..in循环来刮擦。)

于 2013-02-09T21:43:16.770 回答
5

prototypejs 的values方法扩展了 JavaScript 的内置Object对象。没有什么能阻止你做同样的事情:

Object.values = function(object) {
  var values = [];
  for(var property in object) {
    values.push(object[property]);
  }
  return values;
}


var foo = {a:1, b:2, c:3};
console.log(Object.values(foo));
// [1, 2, 3]

或者,如果您不想篡改,可以将上述方法添加到 jQuery 对象Object

$.values = function() { ... }
于 2013-02-09T22:35:22.093 回答
1

使用 ES6,您可以执行以下操作:

Object.values = x =>
        Object.keys(x).reduce((y, z) =>
            y.push(x[z]) && y, []);

这只是返回一个包含对象值的数组。不需要 JQuery、_ 或其他任何东西。


注意: Object.values()目前处于 ES7 草案中

使用 babel,安装

  • babel-preset-es2017
  • babel-plugin-transform-runtime

提供支持Object.values/Object.entries以及其他ES2017功能。

根据模块的建议,.babelrc使用以下内容配置文件:

{
  "plugins": ["transform-runtime"],
  "presets": ["es2017"]
}
于 2016-05-26T10:13:45.097 回答
0

Underscorejs_.values方法: _.values({one : 1, two : 2, three : 3}); => [1, 2, 3]

这个库很好地增强了 JQuery - 以及在prototypejs 中出色地工作。

于 2013-02-09T23:21:29.410 回答