Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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 将参数传递给lodash\u0.result_Javascript_Arguments_Lodash - Fatal编程技术网

Javascript 将参数传递给lodash\u0.result

Javascript 将参数传递给lodash\u0.result,javascript,arguments,lodash,Javascript,Arguments,Lodash,对于第二个属性是方法名的情况,是否有方法将参数传递给lodash\uUresult?或者是否有其他方法(最好是lodash)来实现这一点 用法示例如下所示: var object = { 'cheese': 'crumpets', 'stuff': function( arg1 ) { return arg1 ? 'nonsense' : 'balderdash'; } }; _.result(object, 'cheese'); // => 'crumpets'

对于第二个属性是方法名的情况,是否有方法将参数传递给lodash
\uUresult
?或者是否有其他方法(最好是lodash)来实现这一点

用法示例如下所示:

var object = {
  'cheese': 'crumpets',
  'stuff': function( arg1 ) {
    return arg1 ? 'nonsense' : 'balderdash';
  }
};

_.result(object, 'cheese');
// => 'crumpets'

_.result(object, 'stuff', true);
// => 'nonsense'

_.result(object, 'stuff');
// => 'balderdash'

谢谢。

我查看了lodash uuz.result函数的源代码,但不支持此功能。您可以为此实现您自己的函数,并使用z.扩展lodash


您可以创建自己的mixin。下面是一个使用即将发布的lodash 4.0.0的示例

var reisedeepprop=/\.\124\[(?:[^[\]]*|([“'))(?:(?!\ 1)[^\]\124\]*?\ 1)\]/;
var reisplanprop=/^\w*$/;
变量rePropName=/[^.[\]+\[(?:(?:(?:\.\d+))([“'))((?:(?!\2)[^\\].\\)*?)\2)\]/g;
var reEscapeChar=/\\(\\)?/g;
函数isKey(值、对象){
如果(值的类型=='number'){
返回true;
}
返回!\u0.isArray(值)&&
(Reisplanprop.test(value)| |!Reisplanprop.test(value)||
(object!=对象(object)中的null&&value);
}
函数stringToPath(字符串){
var结果=[];
_.toString(字符串).replace(重新编程名,函数(匹配,编号,引号,字符串){
result.push(引号?string.replace(reEscapeChar,$1'):(数字| |匹配));
});
返回结果;
}
函数baseToPath(值){
返回i.isArray(值)?值:stringToPath(值);
}
函数父级(对象、路径){
返回path.length==1?对象:0.get(对象,0.slice(路径,0,-1));
}
函数customResult(对象、路径、参数、默认值){
如果(!isKey(路径,对象)){
路径=基本路径(路径);
var result=get(对象、路径);
对象=父对象(对象、路径);
}否则{
结果=对象==null?未定义:对象[路径];
}
如果(结果===未定义){
结果=默认值;
}
返回0.isFunction(result)?result.apply(对象,0.isArrayLike(args)?args:[]):结果;
}
_.米辛({
“customResult”:customResult
});
变量对象={
‘奶酪’:‘脆饼’,
“stuff”:函数(arg1){
返回arg1?胡说八道:'balderdash';
}
};
var out=document.getElementById('out');
out.textContent=\.customResult(对象'cheese')+'\n';
//=>“crumpets”
out.textContent+=\.customResult(对象,'stuff',[true])+'\n';
//=>“胡说八道”
out.textContent+=\.customResult(对象'stuff')+'\n';
//=>“balderdash”

下面是另一个mixin实现:

function myResult(obj, path, defaultValue) {

    // Find any arguments beyond what's normally
    // passed to result().
    var args = _.drop(arguments, 3);

    // We need to know upfront whether or not this
    // is a function we're dealing with.
    var isFunc = _.isFunction(_.get(obj, path));

    // If this is a function, and there's arguments
    // to apply, then use spread() and bindKey() to
    // return the result of calling the method with arguments.
    // Otherwise, it's just a plain call to result().
    if (isFunc && args.length) {
        return _.spread(_.bindKey(obj, path))(args);
    } else {
        return _.result(obj, path, defaultValue);
    }
}

_.mixin({ myResult: myResult });
我们的想法是,我们只需要处理添加的情况,其中
path
是一个函数,并且传递了额外的参数。否则,我们将返回基本的
result()
实现

_.myResult(object, 'test');
// → undefined

_.myResult(object, 'test', 15);
// → 15

_.myResult(object, 'cheese', 'wine');
// → "crumpets"

_.myResult(object, 'stuff');
// → "balderdash"

_.myResult(object, 'stuff', null, true);
// → "nonsense"

现在可以使用lodash v4方法执行此操作,但是,如果尝试调用非函数的内容(未定义的道具也可以),则会引发错误:

var对象={
‘奶酪’:‘脆饼’,
“stuff”:函数(arg1){
返回arg1?胡说八道:'balderdash';
}
};
试一试{
var rst1=u2;.invoke(对象“cheese”);
//=>“错误!!”
}捕获(e){
log('错误:cheese不是函数');
}
var rst2=u2;.invoke(对象'stuff',true);
console.log(rst2);//=>'胡说八道
var rst3=u3;.invoke(对象“stuff”);
console.log(rst3);//=>'巴尔德达什'
var rst4=512;.invoke(对象“bob”);
console.log(rst4);//=>'未定义的“

文档似乎没有显示任何方法来实现这一点(如果我理解正确的话),因此我猜测这是不受支持的。你可以在这里要求确定,甚至要求它作为一个附加功能。想法很清楚,谢谢。因此,它似乎解决了更一般的任务,比如deep
result
?在方法
中,customResult
应该是方法
.get
,然后是
.slice
,而不是
.slice
。是的,这个解决方案的工作原理与原始的
.result
一样,它只是将
args
参数添加到方法中。刚刚透露了关于deep
result
,这可能是因为3d版本。在2d版本中,
结果
并不深入。正如我所说,此解决方案基于即将发布的v4.0.0,因此我确信与以前的版本相比有很多改进。感谢非常简单的解决方案!请注意,此解决方案并没有以多种方式提供
\uresult
的全部功能。
_.myResult(object, 'test');
// → undefined

_.myResult(object, 'test', 15);
// → 15

_.myResult(object, 'cheese', 'wine');
// → "crumpets"

_.myResult(object, 'stuff');
// → "balderdash"

_.myResult(object, 'stuff', null, true);
// → "nonsense"