[英]Get part of JS object
不确定问题的标题是否正确,但这是一个例子。 我有对象:
var plumber = {
name: 'Mario',
age: 42,
game: 'Super Mario'
}
我正在寻找一种优雅的方式来使用jQuery
或Undescore
来获取此对象的键和值。
// foo() would be desired elegant function
plumber.foo('name')
#> { name: 'Mario' }
// or even better
plumber.foo(['name','age'])
#> { name: 'Mario', age: 16 }
谢谢!
我认为你可以采用这两种方式(没有这两个库中的任何一个)。 您可以将函数传递给一个键数组,也可以传递可变数量的参数。
使用数组
var plumber = {
name: 'Mario',
age: 42,
game: 'Super Mario'
}
var splitObject = function (obj, keys) {
var holder = {};
keys.forEach(function (d) {
holder[d] = obj[d];
})
return holder;
}
var example = splitObject(plumber, ["name", "age"]);
console.log("example #1", example);
使用可变数量的参数
var variableArguments = function (obj) {
var keys = Array.prototype.slice.apply(arguments).slice(1),
holder = {};
keys.forEach(function (d){
holder[d] = obj[d];
})
return holder;
}
var example2 = variableArguments(plumber, "name", "age");
console.log("example #2", example2);
Underscore.js
可能有自己的功能。 你必须检查文档。
编辑:
根据上面的评论, pick可能是最合适的函数。
不确定你到底想要完成什么,因为你的第一个例子可以通过调用来轻松完成:
plumber.name;
如果您不确定输入是什么,并且需要传递变量,您可以这样做:
var arg = 'name';
plumber[arg];
你的第二个例子有点复杂,为了这些目的,我将假设你希望能够传递任意数组的键并返回一个包含每个键的键/值对的对象。 如果您对全局对象的原型设计感到满意,可以这样做:
Object.prototype.getValuesFromKeys = function (keys) {
var ret = {};
for (var i = 0; i < arr.length; i++) {
ret[keys[i]] = this[keys[i]];
}
return ret;
};
plumber.getValuesFromKeys(['name','age']);
如果您想要在不对全局Object进行原型设计的情况下使用该功能,则可以通过以下方式构建它:
function getValuesFromKeys(obj, keys) {
var ret = {};
for (var i = 0; i < arr.length; i++) {
ret[keys[i]] = obj[keys[i]];
}
return ret;
};
getValuesFromKeys(plumber, ['name','age']);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.