Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取JS对象的一部分_Javascript_Jquery_Underscore.js - Fatal编程技术网

Javascript 获取JS对象的一部分

Javascript 获取JS对象的一部分,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,不确定问题的标题是否公正,但这里有一个例子。我反对: 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.f

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

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);
underline.js
对此可能有自己的功能。你得检查一下文件

编辑:

根据上面的评论,这可能是最合适的函数。

underline.js的功能正好做到了这一点:

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

不确定您在这里到底想要完成什么,因为您的第一个示例可以通过调用:

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.prototype.getValuesFromKeys=函数(键){
var ret={};
对于(变量i=0;i
如果您希望在不原型化全局对象的情况下实现该功能,可以通过以下方式进行构建:

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']);
函数获取键的值(obj,键){
var ret={};
对于(变量i=0;i
第二部分是您想要实现的目标?好了:。浏览文档通常会有所帮助(我就是这么做的,我实际上并不知道
.pick
的存在)。@FelixKling谢谢你,我们可以一次解决很多问题,这看起来像是“天哪,你怎么不知道那个问题”,所以看起来更容易问。无论如何谢谢你。@FelixKling给你一个答案,这样你就得到了rep:)为什么你想让它从年龄中减去26?;)
plumber.name
返回
'Mario'
,而不是
{name:'Mario'}