我对这段代码有问题。对于 editorJSON 中的每个项目,我想访问上一个问题的 id 并将其作为"inputcontext"返回(例如,对于问题 id 2,我想访问问题 id 1,等等(。我尝试使用以下代码实现这一点,但 console.log(( 命令总是给我"8"。
const editorJSON = {
1: {
id: 1,
name: "Question"
},
2: {
id: 2,
name: "Question"
},
3: {
id: 3,
name: "Tipp"
},
4: {
id: 8,
"name": "Question"
}
}
Object.keys(editorJSON).map((key, index) => {
const inputcontext = () => {
let inputcontext = "";
var l = Object.keys(editorJSON).length;
for (i = l; l < 1; i--) {
if (editorJSON[i].name === "Question") {
let inputcontext = editorJSON[i].id;
return inputcontext
}
}
}
console.log(inputcontext())
})
您可以过滤对象的键并映射上一个找到的键。此方法依赖于具有类似索引的键(32 位正整数(的键的顺序。
const
data = { 1: { id: 1, name: "Question" }, 2: { id: 2, name: "Question" }, 3: { id: 3, name: "Tipp" }, 4: { id: 8, name: "Question" } },
previousQuestions = Object
.keys(data)
.filter(k => data[k].name === 'Question')
.map((k, i, a) => [data[k].id, data[a[i - 1]]?.id]);
console.log(previousQuestions);
由于数字键始终按升序迭代,因此您可以循环访问以前的元素,直到使用Array#map
到达问题,该提供原始数组作为回调的第三个参数。
const editorJSON = {
1: {
id: 1,
name: "Question"
},
2: {
id: 2,
name: "Question"
},
3: {
id: 3,
name: "Tipp"
},
4: {
id: 8,
"name": "Question"
}
};
const res = Object.keys(editorJSON).map((key, index, arr) => {
let inputcontext;
for(let i = key - 1; i > 0; i--){
if(editorJSON[i]?.name === "Question"){
inputcontext = editorJSON[i].id;
break;
}
}
return {...editorJSON[key], inputcontext};
});
console.log(res);