Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript—在对象数组中搜索和匹配数据的更好方法?_Javascript_Arrays_For Loop_Ecmascript 6 - Fatal编程技术网

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

Javascript—在对象数组中搜索和匹配数据的更好方法?,javascript,arrays,for-loop,ecmascript-6,Javascript,Arrays,For Loop,Ecmascript 6,有没有更好的方法来做下面的事情?我想在粒子数组中查找与时间戳数组中的搜索日期索引/位置匹配的数据 我的样本数据: 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

有没有更好的方法来做下面的事情?我想在
粒子
数组中查找与
时间戳
数组中的搜索日期索引/位置匹配的数据

我的样本数据:

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'],
}
我将在
时间戳
粒子
中拥有数千个项,因此我认为上述循环可能会在将来导致一些性能问题

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

{
   particles1: [...],
   particles2: [...],
   particles3: [...],
   timestamp: [...]
}
因此,我手动查找匹配数据可能不是一个好方法

还有更好的主意吗

时间戳
始终是数据中的固定键


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

您可以先获取索引,然后获取每个属性的结果集

var数据={粒子:['1.0','1.1','1.2','2.0','2.1','2.2','3.0','3.1',时间戳:['2016-10-10','2016-10-10','2016-10-10','2016-10-11','2016-10-11','2016-10-11','2016-10-13','2016-10-13'],
查找='2016-10-11',
查找={},
指数=[];
data.timestamp.forEach(函数(a,i){
a==查找和索引.push(i);
});
Object.keys(数据).forEach(函数(k){
lookup[k]=index.map(函数(i){
返回数据[k][i];
});
});

console.log(查找)匹配是什么意思?这些数组的共同点是什么?你能控制数组的生成方式吗?@Sergeon yes我能。@Weedoze例如,“2016-10-10”(时间戳中的索引0)将始终与“1.0”(粒子中的索引0)匹配