jQuery中的Object.values()函数

9

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

例如:

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

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

没有,但很容易创建。 - Felix Kling
4个回答

15

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

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

请注意,如果回调函数对于一个给定的属性返回nullundefined,那么该项将不会包含在新数组中,因此,如果您的对象可能具有这些值的属性,则必须以另一种方式处理。不过,使用for..in循环从头开始编写代码非常容易。

应该使用 ... function(key, val) ... 而不是 ... function(val, key) ... - Andrei Stalbe
4
不应该。请查看文档:http://api.jquery.com/jQuery.map/。 - nnnnnn

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]

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

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

1
太棒了!这太完美了!非常感谢!这很完美,因为您不需要向项目添加一个全新的库。 - sksallaj

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"]
}

0

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

这个库非常好地增强了JQuery - 同时在prototypejs中也能很好地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接