繁体   English   中英

获取JS对象的一部分

[英]Get part of JS object

不确定问题的标题是否正确,但这是一个例子。 我有对象:

var plumber = {
  name: 'Mario',
  age: 42,
  game: 'Super Mario'
}

我正在寻找一种优雅的方式来使用jQueryUndescore来获取此对象的键和值。

// foo() would be desired elegant function
plumber.foo('name')
#> { name: 'Mario' }
// or even better
plumber.foo(['name','age'])
#> { name: 'Mario', age: 16 }

谢谢!

_.pick_.pick就是这样做的:

var new_obj = _.pick(obj, ['name', 'age']);

我认为你可以采用这两种方式(没有这两个库中的任何一个)。 您可以将函数传递给一个键数组,也可以传递可变数量的参数。

小提琴

使用数组

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM