gpt4 book ai didi

JavaScript/React Native 数组(对象)排序

转载 作者:行者123 更新时间:2023-11-29 10:58:47 24 4
gpt4 key购买 nike

我开始使用 react-native 构建一个应用程序来跟踪我的 RC 汽车的单圈时间。我有一个带有 TCP 连接(服务器)的 arduino,对于每一圈,这个 arduino 像这样为所有连接的客户端发送当前时间/圈:

{"tx_id":33,"last_time":123456,"lap":612}

在我的程序中(在 react-native 中),我有一个名为 dados 的状态,具有以下结构:

dados[tx_id] = {
tx_id: <tx_id>,
last_time:,
best_lap:0,
best_time:0,
diff:0,
laps:[]
};

这个程序连接到arduino,当接收到一些数据时,只需push到这个状态。在每个转发器的 laps 数组中更具体。最后,我得到这样的东西:

dados[33] = {
tx_id:33,
last_time: 456,
best_lap: 3455,
best_time: 32432,
diff: 32,
laps: [{lap:1,time:1234},{lap:2,time:32323},{lap:3,time:3242332}]
}
dados[34] = {
tx_id:34,
last_time: 123,
best_lap: 32234,
best_time: 335343,
diff: 10,
laps: [{lap:1,time:1234},{lap:2,time:32323},{lap:3,time:3242332}]
}
dados[35] = {
tx_id:35,
last_time: 789,
best_lap: 32234,
best_time: 335343,
diff: 8,
laps: [{lap:1,time:1234},{lap:2,time:32323},{lap:3,time:3242332},{lap:4,time:343232}]
}

此数据使用 map 函数(不是 FlatList)呈现给 View。我现在的问题是我需要在屏幕上打印之前订购它。

现在,使用此代码,数据使用 tx_id 作为顺序打印,因为它是主数组的键。有没有办法使用 laps 属性中的元素数量和第二个排序选项,使用元素的 last_time 属性来排序这个数组?

在这种情况下,我的示例 (35) 的最后一个 tx 将是列表中的第一个,因为它比其他元素多一圈。第二项是 34(因为 last_time)。第三个是 tx 33

在 JavaScript 中有什么方法可以做到这一点,或者我需要创建自定义函数并以递归方式检查每个项目?!

最佳答案

感谢@crackhead420

在等待回答这个问题的时候,我才发现你说的.... :)

这是我最后的测试/解决方案:

var t_teste = this.state.teste;
t_teste[33] = {tx_id: 33, last_time:998,best_lap:2,best_time:123,diff:0,laps:[{lap:1,time:123},{lap:2,time:456}]};
t_teste[34] = {tx_id: 34, last_time:123,best_lap:2,best_time:123,diff:0,laps:[{lap:1,time:123},{lap:2,time:456}]};
t_teste[35] = {tx_id: 35, last_time:456,best_lap:2,best_time:123,diff:0,laps:[{lap:1,time:123},{lap:2,time:456},{lap:3,time:423}]};
t_teste[36] = {tx_id: 36, last_time:789,best_lap:2,best_time:123,diff:0,laps:[{lap:1,time:123},{lap:2,time:456}]};

console.log('Teste original: ',JSON.stringify(t_teste));

var saida = t_teste.sort(function(a, b) {
if (a.laps.length > b.laps.length) {
return -1;
}
if (a.laps.length < b.laps.length) {
return 1;
}
// In this case, the laps are equal....so let's check last_time
if (a.last_time < b.last_time) {
return -1; // fastest lap (less time) first!
}
if (a.last_time > b.last_time) {
return 1;
}
// Return the same
return 0;

});

console.log('Teste novo: ',JSON.stringify(saida));

关于JavaScript/React Native 数组(对象)排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51403192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com