2016-10-11 69 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'], 
} 

我將在timestamp上千項particles所以我覺得在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

相關問題