prototypeJS库有一个方法Object.values(),它返回一个对象中的值数组。
EG:
var myObj = {
"key1" : "val1"
"key2" : "val2"
}
Object.values(myObj) //returns ["val1", "val2"]
是否有一个jQuery方法可以做同样的事情?
答案 0 :(得分:11)
我认为没有一种方法可以直接执行,但您可以使用$.map()
:
$.map(myObj, function(val, key) { return val; }); //returns ["val1", "val2"]
(注意,如果回调返回给定属性的null
或undefined
,该项目将不会包含在新数组中,那么如果您的对象可能包含具有这些值的属性,那么必须采用另一种方式。通过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,安装
支持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中的精彩工作。