目前我有一个数组级别包含其他名为level的数组,这些数组包含阶段.
我想用一个名为position的新属性映射一个级别内的所有对象.该位置返回距阵列中心的距离.按中心我的意思是长度/ 2.
如果数组长度是偶数,我想要以下范围
… -3.5,-2.5,-1.5,-0.5,0.5,1.5,2.5,3.5 …
如果数组长度不均匀,我想要以下范围
… -4,-3,-2,-1,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 }
解决方法
你可以用两个嵌套的地图做到这一点:
const distanceLevels = [ [{ "id": 1 },[{ "id": 6 }] ] const mappedLevels = distanceLevels.map(level => level.map((stage,index,lvl) => ( {...stage,position: index - (lvl.length - 1) / 2} )) ); console.log(mappedLevels);