浅谈Vue2.2.0源码(一)-- 查询一个object类型对象在一个object数组中的索引
初看vue2.2.0源码,总结一些自认为有意思的源码,此篇为其中一些关于查询一个object类型对象在一个object数组中的索引的代码
// 判断 obj 是否是一个object类型的对象
function isObject (obj) {
returnobj !== null &&typeof obj === 'object'
}
// 比较两个对象是否相等
function looseEqual (a, b) {
varisObjectA = isObject(a);
varisObjectB = isObject(b);
if (isObjectA&& isObjectB) { // 当a,b都是Object的时候先转为字符串然后比较它们
return JSON.stringify(a) === JSON.stringify(b)
} elseif (!isObjectA && !isObjectB){ // 当a,b都不是object时,直接通过String()来转换为字符串进行比较
return String(a) === String(b)
} else{ // 当其中一个是object另一个不是时,直接返回false
return false
}
}
// 查询val在数组中的位置,返回索引值,不存在返回 -1
function looseIndexOf (arr, val) {
for(var i = 0; i< arr.length; i++) {
if (looseEqual(arr[i],val)) { return i }
}
return-1
}
// 如果arr 是一个纯Number或者String, looseIndexOf()与indexOf()的作用基本是一样的
looseIndexOf([1,2,3,4,5],3); // 2 === [1,2,3,4,5].indexOf(3)
looseIndexOf([1,2,3,4,5],6); // -1 === [1,2,3,4,5].indexOf(6)
// 但是如果其中是一个包含object类型的数组,indexOf()就不会找到其所在的索引
// 下面是一个使用looseIndexOf的例子
looseIndexOf([
{
name:'obj1',
age:18
},
{
name:'obj2',
age:11
}
],{
name:'obj1',
age:18
}); // 0
// 下面是一个 indexOf的例子
[
{
name:'obj1',
age:18
},
{
name:'obj2',
age:11
}
].indexOf({
name:'obj1',
age:18
}) //-1
更多推荐
所有评论(0)