jQuery中的Object.values()

时间:2013-02-09 21:41:30

标签: javascript jquery prototypejs

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

EG:

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

是否有一个jQuery方法可以做同样的事情?

4 个答案:

答案 0 :(得分:11)

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

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

(注意,如果回调返回给定属性的nullundefined,该项目将不会包含在新数组中,那么如果您的对象可能包含具有这些值的属性,那么必须采用另一种方式。通过for..in循环,从头开始编码非常简单。)

答案 1 :(得分:4)

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]

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

$.values = function() { ... }

答案 2 :(得分:1)

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

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

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

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

使用babel,安装

  • 巴别预置-es2017
  • 巴别-插件变换运行时

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

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

{
  "plugins": ["transform-runtime"],
  "presets": ["es2017"]
}

答案 3 :(得分:0)

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

这个库非常好地增强了JQuery - 以及在prototypejs中的精彩工作。