jQuery中的Object.values()

ind*_*man 8 javascript jquery prototypejs

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

例如:

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

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

nnn*_*nnn 12

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

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

(注意,如果回调返回,null或者undefined对于给定的属性,该项将不包含在新数组中,因此如果您的对象可能具有包含这些值的属性,则必须以另一种方式执行.从以下代码编写代码非常简单但是,有一个for..in循环.)

  • @AndreiStalbe - 不,不应该.检查[doco](http://api.jquery.com/jQuery.map/). (2认同)

osa*_*oun 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]
Run Code Online (Sandbox Code Playgroud)

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

$.values = function() { ... }
Run Code Online (Sandbox Code Playgroud)


Ran*_*ndy 1

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

Object.values = x =>
        Object.keys(x).reduce((y, z) =>
            y.push(x[z]) && y, []);
Run Code Online (Sandbox Code Playgroud)

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


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

使用babel,安装

  • babel-预设-es2017
  • babel-插件-转换-运行时

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

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

{
  "plugins": ["transform-runtime"],
  "presets": ["es2017"]
}
Run Code Online (Sandbox Code Playgroud)