2016-10-11 4 views
1

以下のことを行うより良い方法はありますか? particles配列のデータを検索し、検索日timestamp配列のインデックス/位置に一致するデータを検索したいとします。Javascript - オブジェクト配列内のデータを検索して照合するより良い方法はありますか?

私のサンプルデータ:

var data = { 
    particles: ['1.0', 
    '1.1', 
    '1.2', 
    '2.0', 
    '2.1', 
    '2.2', 
    '3.0', 
    '3.1'], 

    timestamp: ['2016-10-10', 
    '2016-10-10', 
    '2016-10-10', 
    '2016-10-11', 
    '2016-10-11', 
    '2016-10-11', 
    '2016-10-13', 
    '2016-10-13'], 
}; 

マイコード:

var find = '2016-10-11'; 
var lookup = {}; 

var timestamp = []; 
var index = []; 
for (var key in data.timestamp) { 
    if (data.timestamp[key] === find) { 
     timestamp.push(data.timestamp[key]); 
     index.push(key); 
    } 
} 
console.log(timestamp); 
// --> ["2016-10-11", "2016-10-11", "2016-10-11"] 

var particles = []; 
for (var key in data.particles) { 
    // Check if the key is in the index. 
    if (index.indexOf(key) > -1) { 
     particles.push(data.particles[key]); 
    } 
} 
console.log(particles); 
// --> ["2.0", "2.1", "2.2"] 

lookup.particles = particles; 
lookup.timestamp = timestamp; 

console.log(lookup); 

結果:

{ 
    particles: [ 
    '2.0', 
    '2.1', 
    '2.2' 
    ], 

    timestamp: [ 
    '2016-10-11', 
    '2016-10-11', 
    '2016-10-11'], 
} 

私はtimestampparticles何千ものアイテムのを持つことになりますので、私は思いますmaの上にループ将来、パフォーマンス上の問題が発生する可能性があります。

また、私は先物内のオブジェクトに複数のキーを持っているかもしれません:

{ 
    particles1: [...], 
    particles2: [...], 
    particles3: [...], 
    timestamp: [...] 
} 

だから私のは手動のために行くには良い方法はおそらくマッチングデータを探していません。

もっと良いアイデアを教えてください。

timestampは常にデータ内の固定キーです。

私はバニラのJavascriptソリューションを推奨します。

+0

あなたは何を意味するかに設定された結果は 'match'指標を得ることができますか?これらの配列の共通ポイントは何ですか? – Weedoze

+1

配列の生成方法を制御できますか? – Sergeon

+0

@Sergeonはいそうです。 – laukok

答えて

3

あなたが最初にして、すべてのプロパティ

var data = { particles: ['1.0', '1.1', '1.2', '2.0', '2.1', '2.2', '3.0', '3.1'], timestamp: ['2016-10-10', '2016-10-10', '2016-10-10', '2016-10-11', '2016-10-11', '2016-10-11', '2016-10-13', '2016-10-13'] }, 
 
    find = '2016-10-11', 
 
    lookup = {}, 
 
    indices = []; 
 

 

 
data.timestamp.forEach(function (a, i) { 
 
    a === find && indices.push(i); 
 
}); 
 

 
Object.keys(data).forEach(function (k) { 
 
    lookup[k] = indices.map(function (i) { 
 
     return data[k][i]; 
 
    }); 
 
}); 
 
    
 
console.log(lookup);

+1

ありがとうございます。それは私のものよりも良く見えます! – laukok

関連する問題