javascript,比较不同大小的数组
javascript, compare arrays of different sizes
有两个大小可能不同的数组,看看它们是否相同的最佳方法是什么
例如
var a1 = [ 1, 2, 3 ];
var a2 = [ 1, 2 ];
var a3 = [ 1, 3 ];
a1 == a2 => true;
a1 == a3 => false;
我确信这已经做了数千次了,语法已经被很好地记住了
这是怎么回事(我只会在a1和a2上演示->我想你可以用它来实现功能):
var min_val = min(a1.length, a2.length);
var equals = true;
for(i = 0; i < min_val; i++)
{
if(a1[i] != a2[i])
{
equals = false;
break;
}
}
当然,结果将以equals变量表示。如果您想从中生成函数,只需将a1和a2作为参数传递并返回equals。
function compareArraySeq(a, b) {
return a.slice(0, b.length).join(' ') == b.slice(0, a.length).join(' ');
}
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;
}
[edit]基于Tomalaks的评论,我认为JSON可以起到拯救作用。
所以,再一次:这里有一个Array扩展,它可以做你想做的事情:
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 prefixEqual(a, b) {
var prefixLength = a.length < b.length ? a.length : b.length;
for(var i = 0; i < prefixLength; i+=1)
if( a[i] != b[i] )
return false;
return true;
}
一次循环检查一个点。我做了这个:
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;
}
现在你可以比较这样的数组:
var a = [0, 1, 2, 3];
var b = [0, 1, 2];
var c = [0, 1, 3];
compare(a, b); //true
compare(a, c); //false
希望这对你有用:)
Fiddle链接:http://jsfiddle.net/8zbJj/1/
如果数组是字符串、数字或布尔值,则可以比较它们的String值。
function compareSimpleValues(a,b){
if(a.length>=b.length)return String(a).indexOf(String(b))===0;
return String(b).indexOf(String(a))===0;
}
相关文章:
- 如何使用 node.js 比较两个 json 数组
- MongoDB-通过比较集合和对象的数组来返回现有字段的数组
- underline-js:将键对象与数组键对象进行比较,如果存在,则移除现有的添加新的
- 比较二维数组js
- 如何放置ÅÄ和#214;在javascript数组中,然后将其与html文本进行比较
- 数组比较并获取计数
- Javascript数组比较问题
- 用于在数组比较之后由于某种原因而爆发循环
- javascript数组比较多次循环
- 这是有效的JavaScript数组比较算法
- 2D数组比较-嵌套循环错误
- 数组比较在Chrome工作,但不与Chrome IPAD
- 对象/数组比较算法,以确定共性/相似性
- 谷歌电子表格中的数组比较
- 整数数组比较
- Javascript数组比较
- node.js中的数组比较
- JavaScript关联数组比较
- Javascript数组比较
- JavaScript数组比较的奇怪行为