javascript,比较不同大小的数组
对于两个可能大小不同的数组,最好的方法是什么来确定它们是否完全相同 比如说javascript,比较不同大小的数组,javascript,arrays,Javascript,Arrays,对于两个可能大小不同的数组,最好的方法是什么来确定它们是否完全相同 比如说 var a1 = [ 1, 2, 3 ]; var a2 = [ 1, 2 ]; var a3 = [ 1, 3 ]; a1 == a2 => true; a1 == a3 => false; 我敢肯定这已经做了数千次,语法也被很好地记住了,那么这个呢(我将在a1和a2上演示->我想你可以利用它来实现功能): var min\u val=min(a1.长度,a2.长度); var等于真; 对于(i=0;i
var a1 = [ 1, 2, 3 ];
var a2 = [ 1, 2 ];
var a3 = [ 1, 3 ];
a1 == a2 => true;
a1 == a3 => false;
我敢肯定这已经做了数千次,语法也被很好地记住了,那么这个呢(我将在a1和a2上演示->我想你可以利用它来实现功能):
var min\u val=min(a1.长度,a2.长度);
var等于真;
对于(i=0;i
当然,结果是相等的。如果你想利用这个函数,只需将a1和a2作为参数传递,并返回等于。函数comparararayseq(a1,a2){
function compareArraySeq(a1, a2) {
var i, l = Math.min(a1.length, a2.length);
for (i=0; i<l; i++) {
if (a1[i] !== a2[i]) return false;
}
return true;
}
变量i,l=数学最小值(a1.长度,a2.长度);
对于(i=0;i函数prefixEqual(a,b){
可变前桥长度=a.长度
一次循环检查一个点。
我已作出以下声明:
var compare = function (a1, a2) {
var l = Math.min(a1.length, a2.length);
for (var i = 0; i < l; i++) {
if (a1[i] !== a2[i]) {
return false;
}
}
return true;
}
希望这对你有用:)
Fiddle链接:[edit]根据评论,我认为JSON可以起到解救作用
同样,这里有一个数组扩展,它完成了[我想]您想要做的事情:
function comparePartial(arr1,arr2){
var arr2 = this, l1 = arr1.length, l2 = arr2.length;
return ( l1<1 || l2<1
? false :
JSON.stringify(arr1.slice(0, l2)) ===
JSON.stringify(arr2.slice(0, l1))
);
}
Array.prototype.comparePartial =
Array.prototype.comparePartial || comparePartial;
//usage
var a1 = [ 1, 2, 3 ]
,a2 = [ 1, 2 ]
,a3 = [ 1, 3 ]
,a4 = ['','']
,a5 = ['','','']
,a6 = []
,a7 = ['bla','doh',1]
,a8 = ['bla','doh',1,'yeah','really']
,a9 = [1,3,5,'doh']
,a10= ['1','3','5','doh']
,a11= [{a:1,b:2},{c:3,d:4}]
,a12= [{a:1,b:2},{c:3,d:4},{e:5,f:6}]
console.log(
[ a1.comparePartial(a2)
,a2.comparePartial(a1)
,a1.comparePartial(a3)
,a4.comparePartial(a5)
,a5.comparePartial(a6)
,a1.comparePartial(a6)
,a8.comparePartial(a7)
,a10.comparePartial(a9) //=> 'type safe' comparison
,a11.comparePartial(a12) //=> can compare arrays of Objects
].join(' - ')
); //=> true - true - false - true - false - false - true - false - true
函数比较部分(arr1、arr2){
var arr2=this,l1=arr1.length,l2=arr2.length;
返回(l1可以比较对象数组
].join(“-”)
);//=>真-真-假-真-假-假-真-假-真-假-真
如果数组是字符串、数字或布尔值,则可以比较它们的字符串值
function compareSimpleValues(a,b){
if(a.length>=b.length)return String(a).indexOf(String(b))===0;
return String(b).indexOf(String(a))===0;
}
为什么第一个是真的,第二个是假的?为什么al
&a2
是一样的?因为a2
的内容在a1
中是真的,它解决了这个问题,但是认为使用slice etc可以在不创建函数的情况下完成它。与slice解决方案不同,这也适用于非标量值,即对象数组。非常漂亮聪明。可以在不使用函数def的情况下使用这种方法,但键入太多。那么可能是数组扩展是个好主意吗?@KooiInc请参阅我的注释。将数组转换为字符串并不能解决问题。@Tomalak:yep。将我的答案替换为comparison@KooiInc也许效率不算太高,但作为交换,它的简单和高效s表示嵌套数据。+1输出!!不需要函数调用!输入开销不算太大。@c如果空字符串数组元素失败,则不应使用它。@Tomalak-使用空数组正确测试-缺少所说内容-您能举个例子吗?thanks@Tomalak-非常好。这种情况下肯定会失败。这是po使用join(“”)可以解决这个问题。在答案中更改了这一点。@ccyoung“当星星对齐时”是一种注定要失败的编程方式。
var a = [0, 1, 2, 3];
var b = [0, 1, 2];
var c = [0, 1, 3];
compare(a, b); //true
compare(a, c); //false
function comparePartial(arr1,arr2){
var arr2 = this, l1 = arr1.length, l2 = arr2.length;
return ( l1<1 || l2<1
? false :
JSON.stringify(arr1.slice(0, l2)) ===
JSON.stringify(arr2.slice(0, l1))
);
}
Array.prototype.comparePartial =
Array.prototype.comparePartial || comparePartial;
//usage
var a1 = [ 1, 2, 3 ]
,a2 = [ 1, 2 ]
,a3 = [ 1, 3 ]
,a4 = ['','']
,a5 = ['','','']
,a6 = []
,a7 = ['bla','doh',1]
,a8 = ['bla','doh',1,'yeah','really']
,a9 = [1,3,5,'doh']
,a10= ['1','3','5','doh']
,a11= [{a:1,b:2},{c:3,d:4}]
,a12= [{a:1,b:2},{c:3,d:4},{e:5,f:6}]
console.log(
[ a1.comparePartial(a2)
,a2.comparePartial(a1)
,a1.comparePartial(a3)
,a4.comparePartial(a5)
,a5.comparePartial(a6)
,a1.comparePartial(a6)
,a8.comparePartial(a7)
,a10.comparePartial(a9) //=> 'type safe' comparison
,a11.comparePartial(a12) //=> can compare arrays of Objects
].join(' - ')
); //=> true - true - false - true - false - false - true - false - true
function compareArraySeq(a, b) {
return a.slice(0, b.length).join(' ') == b.slice(0, a.length).join(' ');
}
function compareSimpleValues(a,b){
if(a.length>=b.length)return String(a).indexOf(String(b))===0;
return String(b).indexOf(String(a))===0;
}