0

これはとても簡単だと思います (私は初心者です!) が、解決策が見つかりませんでした。

.csv ファイルから 2 つの配列をインポートし、2 つを比較して、List1 には表示され、List2 には表示されない値を返したいと思います。したがって、List1 から List2 を引いて = 私の結果です。

List1 は 100,200,300,400 と List2 100,200 のようになります。300,400を返したいと思います。

(リスト 2 にリスト 1 にない値が含まれている場合は、とにかく実行してエラーを出さないようにしたいのですが、そうならないのでしょうか?)

ヒント/ポインターまたはコードを事前にありがとうございます。親切にしてください:-)

4

3 に答える 3

0

回答ありがとうございます。

このコードはまだ私の理解を少し超えているのではないかと心配しているので、さまざまなオプションをテストしたところ、エラーメッセージなしで目的の結果が得られると思われるものは、計算する最速または最もエレガントな方法は何ですかJavascript配列を使用したセットの違いは? 、Vache によって正しく指摘されているように、それは次のとおりです。

A = [100,200,300];
B = [100,200,500];

diff_set = {
    ar : {},
    diff : Array(),
    remove_set : function(a) { ar = a; return this; },
    remove: function (el) {
        if(ar.indexOf(el)<0) this.diff.push(el);
    }
};

A.forEach(diff_set.remove_set(B).remove,diff_set);
C = diff_set.diff;

最初に投稿されたのはXavi Ivars です。

答えてくれてありがとう!! とても有難い :-)

于 2014-09-17T23:11:40.490 に答える
0

,次のように値が区切られた2 つの文字列があるとします。

var a= "100, 200, 400";
var b = "100, 200, 300";

String.splitconvert それらを配列に使用して、次のように値を連結できます。

var items = (a +","+ b).split(',');

そして、次のArray.prototype.reduceようないくつかの方法でこれを行うことができます

items.reduce(function(a,c){  var count = a.filter(function(item){ return item ===c; }).length; if(count<1 ) a.push(c); return a;},[]);
于 2014-09-16T21:09:48.620 に答える
0

これはうまくいくようです:

var array1 = [100,200,300,400];
var array2 = [200,100,400];
function array_diff(arr1,arr2)
{
    var x = Math.max(arr1.length,arr2.length);
    for(var i = 0; i < x; i++)
    {
        if(typeof arr1[i] !== 'undefined' && arr2.indexOf(arr1[i]) !== -1)
            arr1.splice(i,1);
        if(typeof arr2[i] !== 'undefined' && arr1.indexOf(arr2[i]) !== -1)
            arr1.splice(arr1.indexOf(arr2[i]),1);
    }
    return arr1;
}
console.log(array_diff(array1,array2));

Array.prototype.filterandArray.prototype.reduceは古いブラウザと互換性がないため、使用を避けようとしました。私の知る限り、Array.prototype.spliceより良いサポートがあります。

速度の向上を求めている場合は、間違っている可能性がありますが、事前に配列をソートすると速度が向上すると思いますindexOf

http://jsfiddle.net/0tcyam2f/1/

于 2014-09-16T21:34:23.800 に答える