javascript - 将数组拆分为从负到正的范围
问题描述
目前我有一个levels
包含其他数组的数组level
,这些数组包含stages
.
我想用一个名为position
. 该位置返回到数组中心的距离。中心是指长度 / 2。
如果数组长度是偶数,我想要以下范围
... -3.5 , -2.5 , -1.5 , -0.5 , 0.5 , 1.5 , 2.5 , 3.5 ...
如果数组长度甚至不是我想要以下范围
... -4 , -3 , -2 , -1 , 0 , 1 , 2 , 3 , 4 ...
我开始创建这个
const distanceLevels = [
[{
"id": 1
}, {
"id": 8
}],
[{
"id": 2
}],
[{
"id": 3
}, {
"id": 4
}, {
"id": 5
}, {
"id": 7
}],
[{
"id": 6
}]
];
function getViewLevels() {
const viewLevels = []; // the new array as the result
distanceLevels.forEach(level => { // one level containing the stages
const levelLength = level.length;
const halfLevelLength = levelLength * 0.5;
const levelLengthIsEven = levelLength % 2 == 0;
let viewLevel = []; // the mapped level
if (levelLengthIsEven) {
addViewStage(viewLevel, level[Math.floor(halfLevelLength)], 0);
}
for (let i = 0; i < halfLevelLength; i++) {
let rightPosition = i - halfLevelLength;
let leftPosition = i;
let leftStageIndex = i;
if (levelLengthIsEven) {
leftPosition++;
leftStageIndex += Math.floor(halfLevelLength) + 1;
} else {
rightPosition += 0.5;
leftPosition += 0.5;
leftStageIndex += halfLevelLength;
}
addViewStage(viewLevel, level[i], rightPosition);
addViewStage(viewLevel, level[leftStageIndex], leftPosition);
}
viewLevel = viewLevel.sort((a, b) => a.position > b.position); // sort the result by their position, means from negative to positive
viewLevels.push(viewLevel); // add this new view level
});
console.log(viewLevels); // <---- result here!
}
function addViewStage(viewLevel, stage, position) { // push a new element to the array
viewLevel.push({
stage: stage,
position: position
});
}
getViewLevels();
这是我得到的结果
我真的在数学上挣扎。我要做的就是将每个对象映射到级别
舞台(对象)
至
{
stage: stage,
position: position // with the correct range
}
解决方案
您可以使用两个嵌套来做到这一点maps
:
const distanceLevels = [
[{
"id": 1
}, {
"id": 8
}],
[{
"id": 2
}],
[{
"id": 3
}, {
"id": 4
}, {
"id": 5
}, {
"id": 7
}],
[{
"id": 6
}]
]
const mappedLevels = distanceLevels.map(level =>
level.map((stage, index, lvl) => (
{...stage, position: index - (lvl.length - 1) / 2}
))
);
console.log(mappedLevels);
推荐阅读
- python - 根据另一个数据框中的值删除数据框中的行
- c - 在 C 编程中使用多线程写入和输出到文件
- javascript - 从带有html的javascript中的输入文本中输出数字的第三和第四位置
- python - 如何在 alpine docker 映像中为 orjson python 库构建设置 rust 工具链?
- spring-boot - 如何从 JPA 自定义查询中打印 Thymeleaf 中的值和计数?
- javascript - data.symbol 不持有价值
- react-typescript - React-typescript:类型“IPayloadData”不可分配给类型“字符串”
- postgresql - 我可以在执行之前修改postgresql sql吗
- verilog - 数组需要在 always @(my_array) 块上的数组索引(在 Verilog 中实现寄存器冒泡)
- c++ - clang/gcc c++,编译器是否可以输出每个.cpp中所有初始化模板的列表?