作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在遍历以下数组数组,对于数组中的第一项,我需要在每一项之后插入一个对象,第一项和最后一项除外。数据看起来像这样......
const data = [
['Path', 'Item1', 'Item2', 'Item3', 'Item4', 'Item5', 'Score'],
['/path-one', 1, 3, 2, 2, 4, 3],
['/path-two', 4, 5, 5, 5, 6, 3],
['/path-three', 5, 5, 3, 5, 3, 3],
['/path-four', 2, 3, 4, 2, 2, 3],
]
对于第一行,除了第一个项目和最后一个项目,我想在每隔一个项目之后插入一个对象 {role: 'annotation'}
。对于其余行,对于具有 Angular 色对象的第一个项目数组中的每个索引,我想复制以前的值,这样如果修改后的第一个数组是:['Path', 'Item1', {role: 'annotation'}, 'Item2', {role: 'annotation'}, 'Score']
,然后其他数组将遵循模式 ['/path-one', 'value1', 'value1', 'value2', 'value2', 'value3']
到目前为止,我的解决方案还不够完善。这是我想出的……
let indexes = []
let scoreIndex
const result = data.map((item, index) => {
let clone = [...item]
item.map((i, ix) => {
if (index === 0) {
if (ix !== 0 && typeof clone[ix + 1] === 'string' && typeof clone[ix] !== 'object') {
if (clone[ix + 1] === 'Score') {
scoreIndex = ix
}
indexes.push(ix)
clone.splice((ix + 1), 0, {role: 'annotation'})
}
return i
} else {
if (indexes.includes(ix) && ix !== scoreIndex) {
item.splice((ix + 1), 0, i)
return i
}
return i
}
})
return clone
})
非常感谢您的帮助。
最佳答案
也许我误解了什么。我假设如下:
::data数组中每个数组的长度相同。
::您需要在每个位置之后注入(inject),这会弄乱一个 for 循环,增加它的 i
(teration) 变量。
::第一个数组中总是有一个Path
和一个Score
。
::你想在每个值之后添加一个新值,除了上面两个。
解决方案
data[0].length
我循环遍历每个值一次,但我按以下顺序执行:'Item5', 4, 6, 3, 3, 'Item4', 2, 5, 5, 2, 'Item3', ...
const data = [
['Path', 'Item1', 'Item2', 'Item3', 'Item4', 'Item5', 'Score'],
['/path-one', 1, 3, 2, 2, 4, 3],
['/path-two', 4, 5, 5, 5, 6, 3],
['/path-three', 5, 5, 3, 5, 3, 3],
['/path-four', 2, 3, 4, 2, 2, 3],
]
function mapArray(data) {
let secondToLastItem = data[0].length - 2; // 1 & 3
let FIRST_ITEM = 0; // 4
for (let index = secondToLastItem; index > FIRST_ITEM; index--) { // 2
for (let item = 0; item < data.length; item++) {
let injectedValue = (item == FIRST_ITEM) // 5
? {'role': 'annotation'}
: data[item][index];
data[item].splice(index + 1, 0, injectedValue);
}
}
return data;
}
console.log( mapArray(data) );
关于javascript - 如何在多数组循环中的特定位置插入项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68582345/
我是一名优秀的程序员,十分优秀!