2016-05-02 4 views
1

と私はarr2を返すようにしたいが、ARRとそれを比較することにより、変更かどうかがあるのか​​どうかをユーザーに促したいです。以下のアプローチでは、arr2に不足している項目がある場合、私は未定義のIDを得ました。は)(ジャバスクリプトフィルタを使用してフラグ

var arr = [{ 
 
    id: 1, 
 
    name: 'something' 
 
}, { 
 
    id: 2, 
 
    name: 'something2' 
 
}] 
 

 
var arr2 = [{ 
 
    id: 1, 
 
    name: 'something' 
 
}] 
 

 
var result = arr.filter(function(obj, i) { 
 
    return obj.id == arr2[i].id; 
 
}); 
 

 
document.write(JSON.stringify(result))

+0

私はあなたがこのことについて正しい方法を行っている確信していません。 IDが同じ順序になることは保証されていますか? arr2のハッシュ値が同じで、順序が違うとどうなりますか?それが変化として検出されるべきか?名前が変わったら? – karina

+0

@karinaのIDは同じになります。しかし、命令は重要ですか? –

+0

待って...それは私があなたに求めているものです。配列の順序は重要ですか?各アレイ内のIDが[1,2]であり、[2,1]あなたは[変更] – karina

答えて

1

あなたのコードに問題がarr[1]は未定義であり、あなたが未定義のidプロパティを取得しようとしているということです。今あなたができることは、配列のidを取得し、インデックスを取得し、それをフィルタに基づいて調べることです。 .filtercallbackarr2スルー

var arr = [{ 
 
    id: 1, 
 
    name: 'something' 
 
}, { 
 
    id: 2, 
 
    name: 'something2' 
 
}] 
 

 
var arr2 = [{ 
 
    id: 1, 
 
    name: 'something' 
 
}]; 
 

 
var arrIds = arr2.map(function(v) { 
 
    return v.id; 
 
}); 
 

 
var result = arr.filter(function(obj) { 
 
    var i = arrIds.indexOf(obj.id); 
 
    return i > -1 && 
 
    obj.name == arr2[i].name; // check name property here 
 
}); 
 

 
document.write(JSON.stringify(result))

+0

Pranavことを考えるならば、 'arr2'の' length'がarr' .. – Rayon

+0

'より大きい場合たとえば、また考えます@Rayon: 'ARR [i]は' –

+0

'場合は、配列の長さをどうしますか3 'と 'arr2'の長さが' 5'の場合、 '.filter'ハンドラは' 3'時間だけ呼び出されます... 5.ではありません。私が間違ったことを読んでいるなら、私を修正してください.. – Rayon

0

ループarr2の各項目をテストします。

var arr = [{ 
 
    id: 1, 
 
    name: 'something' 
 
}, { 
 
    id: 2, 
 
    name: 'something2' 
 
}] 
 

 
var arr2 = [{ 
 
    id: 1, 
 
    name: 'something' 
 
}, { 
 
    id: 5, 
 
    name: 'something' 
 
}, { 
 
    id: 8, 
 
    name: 'something' 
 
}]; 
 

 
var isValInArr = function(arr, key, val) { 
 
    for (var i = 0, len = arr.length; i < len; i++) { 
 
    if (arr[i][key] === val) { 
 
     return true; 
 
    } 
 
    } 
 
    return false; 
 
}; 
 

 
var result = arr.filter(function(obj, i) { 
 
    return isValInArr(arr2, 'id', obj.id); 
 
}); 
 

 
document.write(JSON.stringify(result))

+0

を更新しましたか? –

+0

@JamieJordan、私はあなたを得ていませんでした:( – Rayon

+0

は、値が1であるIDを意味し、その名前の値が変更されたかどうかを確認する方法です。 –

関連する問題