首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript -在对象数组中搜索和匹配数据的更好方法?

Javascript -在对象数组中搜索和匹配数据的更好方法?
EN

Stack Overflow用户
提问于 2016-10-11 09:23:57
回答 1查看 54关注 0票数 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'],
};

我的代码:

代码语言:javascript
复制
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);

结果:

代码语言:javascript
复制
{
    particles: [
    '2.0',
    '2.1',
    '2.2'
    ],

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

我将在timestampparticles中设置数千个条目,所以我认为上面的循环可能会在将来引起一些性能问题。

此外,我可能在未来的对象中有更多的键:

代码语言:javascript
复制
{
   particles1: [...],
   particles2: [...],
   particles3: [...],
   timestamp: [...]
}

因此,我手动查找匹配的数据可能不是一个好方法。

有更好的主意吗?

timestamp始终是数据中的一个固定键。

我更喜欢香草 Javascript解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-11 09:34:25

您可以先得到索引,然后得到每个属性的结果集。

代码语言: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'] },
    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);

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39974141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档