gpt4 book ai didi

javascript - 如何在函数返回中向对象添加多个数组?

转载 作者:行者123 更新时间:2023-12-02 21:12:33 25 4
gpt4 key购买 nike

我有一个函数,它接受一个对象作为 prop,并且需要使用 for 循环向其添加数组。我的问题是,只有在调用时添加单个数组时它才有效。如果要添加多个数组,我会收到错误 linkLineItems.push is not a function,但我认为 .push 可用于将数组添加到对象。

这是函数:

function PrepareSuccessorActivityLinkData(data, existingLinks, linkSetter) {
for (let [key, value] of Object.entries(data)) {
let linkLineItems;
let linkLineItem;
if (data.activitiesafter[0] != "DEFAULT") {
for (var i = 0; i < data.activitiesafter.length; i++) {
linkLineItem = {
source: data.itemname,
target: data.activitiesafter[i],
type: "activity-activity-after"
};
if (!linkLineItems) {
linkLineItems = linkLineItem;
} else {
linkLineItems.push(linkLineItem);
}
}
} else {
continue;
}
return linkSetter(linkData => [...existingLinks, linkLineItems]);
}
}

有关如何向对象添加多个数组的任何帮助吗?

编辑 #1:我尝试向其中添加项目的 existingLinks 或对象的示例数据

var linksData = [
{"source": "Do Something", "target": "My Document", "type": "Activity Output"},
{"source": "My Document", "target": "Operator", "type": "Object Responsible"},
{"source": "Operator", "target": "Do Something", "type": "Role Activity"}
];

编辑 #2:作为 data 传递到函数中的示例数据

[{
itemname: "Hello World",
itemtype: "activity",
activitiesafter: ["Do Stuff", "Do Other Stuff"]
}]

最佳答案

一些自称的最佳实践:

  1. 当不需要索引时,尽可能避免使用 for 循环。 (参见 forEach 等)。这样可以减少污染您眼睛的变量。
  2. 尽早“继续”或“返回”以避免嵌套内容(例如首先出现返回链接)
  3. 尝试最大程度地缩小变量的范围。这里也是通过使用 forEach 来实现的

function nameTooLong(data, existingLinks, linkSetter) {
const moreLinks = data.reduce((links, item) => {
if (item.activitiesafter[0] === "DEFAULT") {
return links
}
item.activitiesafter.forEach(activity => {
links.push({
source: item.itemname,
target: activity,
type: "activity-activity-after"
})
})
return links
}, [])
return linkSetter(_ => existingLinks.concat(moreLinks))
}

nameTooLong([{
itemname: "Hello World",
itemtype: "activity",
activitiesafter: ["Do Stuff", "Do Other Stuff"]
},{
itemname: "shold be ignored",
itemtype: "activity",
activitiesafter: ["DEFAULT", "nothing there"]
}], ['toto'], (fn) => console.log('newlinks: ', fn()))

如果您阅读了 3.,我们可以做得更好,甚至可以通过使用 flatMap 来避免操作变量链接。

function nameTooLong(data, existingLinks, linkSetter) {
const moreLinks = data.flatMap(item => {
if (item.activitiesafter[0] === "DEFAULT") {
return []
}
return item.activitiesafter.map(activity => ({
source: item.itemname,
target: activity,
type: "activity-activity-after"
}))
})
return linkSetter(_ => existingLinks.concat(moreLinks))
}

nameTooLong([{
itemname: "Hello World",
itemtype: "activity",
activitiesafter: ["Do Stuff", "Do Other Stuff"]
},{
itemname: "shold be ignored",
itemtype: "activity",
activitiesafter: ["DEFAULT", "nothing there"]
}], ['toto'], (fn) => console.log('newlinks: ', fn()))

关于javascript - 如何在函数返回中向对象添加多个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61049247/

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