5.9 findKey
5.9.1 语法
_.findKey(obj, predicate, [context])
5.9.2 说明:
对list集合的每个成员依次进行匹配(根据predicate迭代函数检测),返回第一个匹配成功的属性名
- list可以为数组,对象和arguments
- predicate会传第三个参数value, key, list(参数名可自定义)
- predicate函数需要返回值
- context可以改变predicate函数内部的this
2.9.3 代码示例:
示例一:find对数组,对象,字符串,arguments进行操作并返回匹配成功的数据
var result;
// 操作数组
result = _.findKey([1, 2, 3], function (value) {
return value === 1;
});
console.log(result) //=> "1"
// 操作对象
result = _.findKey({ one: '一', two: '二', three: '三' }, function (value) {
return value === '三';
});
console.log(result) //=> "three"
// 操作复杂的对象
var obj = {
levelA: {
level0: 'level0',
level1: 'level1'
},
levelB: '一',
levelC: 1
}
result = _.findKey(obj, function (value) {
return value.level0 === 'level0';
});
console.log(result) //=> "levelA"
//操作arguments
function abc() {
result = _.findKey(arguments, function (value) {
return value === 2;
});
console.log(result); //=> "1"
}
abc(1, 2, 3);
注:(此方法和数组章节的findIndex方法类似);
示例二:predicate函数传递的参数(函数内部需要return返回值,否则返回undefined)
var result;
//数组的情况
result = _.findKey([1, 2, 3], function (value, key, list) {
console.log(value, key, list);
//=> 1 0 [1, 2, 3]
//=> 2 1 [1, 2, 3]
//=> 3 2 [1, 2, 3]
return false;
});
//对象的情况
result = _.findKey({one: '一', two: '二', three: '三'}, function(value, key, list){
console.log(value, key, list);
//=> 一 one Object {one: "一", two: "二", three: "三"}
//=> 二 two Object {one: "一", two: "二", three: "三"}
//=> 三 three Object {one: "一", two: "二", three: "三"}
return false;
});
示例三:context可以改变predicate内部的this
var result;
// 数组的情况
result = _.findKey([1, 2, 3], function (value, key, list) {
console.log(this); //=> [1, 2, 3] this是数组
}, [1, 2, 3]);
// 对象的情况
result = _.findKey([1, 2, 3], function (value, key, list) {
console.log(this); //=> Object {no: 10} this是对象
}, { "no": 10 });
// 字符串的情况
result = _.findKey([1, 2, 3], function (value, key, list) {
console.log(this); //=> String {0: "1", 1: "2", 2: "3", length: 3, [[PrimitiveValue]]: "123"} this是将字符串拆分后的对象
}, "123");
2.9.4 特殊情况
示例一:list的特殊情况
//例如:null,undefined,0,true,this等;
var result = _.findKey(null, function (value, key, list) {
return true;
});
console.log(result) //=> "undefined"
示例二:predicate函数的this为window全局对象的情况
// 例如:null,undefined,window,this等
var result = _.findKey([1, 2, 3], function (value, key, list) {
console.log(this); //=> this是window全局对象
}, null);
2.9.5 list参数可为真假值?
var result = _.findKey([false, 1, true, '1', 0, undefined, null]);
console.log(result) //=> "1"
2.9.6 predicate还有其他写法?
示例一:predicate参数为空的时候
var result = _.findKey({x: 1, y: 2});
console.log(result) //=> "x"
示例二:predicate参数为一个字符的时候
var result = _.findKey([{ x: 1 }, { y: 2 }], 'y');
console.log(result) //=> "1"
示例三:predicate参数为对象的时候
var obj = [
{ x: 1, y: 2 },
{ x: 1 },
{ y: 2, z: 3 }
]
var result = _.findKey(obj, { z: 3 });
console.log(result) //=> "2"
示例三:predicate参数为系统方法的时候
var result = _.findKey(["a", 1, 2, 3], Math.abs);
console.log(result) //=> "1"