2

したがって、電子メールアドレスが同じである場所をマージするために、重複する値 (以下に示す) を持つ 2D 配列を作成したいと考えています。メールは常に同じ位置にあります。

[['john.doe@example.com', 64], ['john.doe@example.com', 65], ['jane.doe@example.com', 66]]

私の希望は、次の結果が得られることです。

[['john.doe@example.com', 64, 65], ['jane.doe@example.com', 66]]

配列に大量の値が含まれるとは思わないので、答えが非常に効率的でない場合、それは問題ではありません。

編集:

これは私が試したもので、うまくいきました。

誰かが以前にこの回答を投稿しましたが、私はそれがとても気に入りましたが、その後削除されました。だから私はそれを投稿して、他の人がどう思うか見てみましょう。私は小道具を取りません!

var a = [['john.doe@example.com', 64], ['john.doe@example.com', 65], ['jane.doe@example.com', 66]];
var map = {};
for(var i=0; i<a.length; i++) {
    if(a[i][0] in map) {
        map[a[i][0]].push(a[i][1]);
    } else {
        map[a[i][0]] = [a[i][1]];
    }
}
console.log(map);

この最初の部分は、重複を実際に削除し、配列内の数値を持つオブジェクトに変換します。

a.length = 0;
for(var p in map) {
   a.push([p].concat(map[p]));   
}
console.log(a);

この 2 番目の部分はオプションです。オブジェクトを配列に変換します。

誰がこれを投稿したかはわかりませんが、私はこれが行われた方法が好きでした.

4

2 に答える 2

2

私の入力:

var list = [['john.doe@example.com', 64], ['john.doe@example.com', 65], ['jane.doe@example.com', 66]],
    output = [],
    helper = [],
    index;

for(var i = 0; i < list.length; i++) {
 index = helper.indexOf(list[i][0];
 if(index !== -1) {
  output[index].push(list[i][1]);
 } else {
  helper.push(list[i][0]);
  output.push(list[i]);
 }
}
console.log(output);
于 2013-09-13T22:11:09.507 に答える
0

これを行う簡単な方法は次のとおりです。

function getIndex(a, email) {
    for (var i = 0; i < a.length; i++) {
        if (a[i][0] === email) {
            return i;
        }
    }
    return -1;
}

var a = [['john.doe@example.com', 64], ['john.doe@example.com', 65], ['jane.doe@example.com', 66]];

var b = []

for (var i = 0; i < a.length; i++) {
    var index = getIndex(b, a[i][0]);       
    if(index == -1){
        b.push(a[i]);
    }else{
        b[index].push(a[i][1]);
    }
};

console.log(b);
于 2013-09-13T22:08:42.753 に答える