Javascript 如何在函数返回中向对象添加多个数组?
我有一个函数,将对象作为道具,需要使用Javascript 如何在函数返回中向对象添加多个数组?,javascript,reactjs,Javascript,Reactjs,我有一个函数,将对象作为道具,需要使用for循环向其添加数组。我的问题是,它只在调用单个数组时才起作用。如果要添加多个数组,我会收到错误linkLineItems.push不是一个函数,但我认为可以使用.push将数组添加到对象 以下是函数: function PrepareSuccessorActivityLinkData(data, existingLinks, linkSetter) { for (let [key, value] of Object.entries(data)) {
for
循环向其添加数组。我的问题是,它只在调用单个数组时才起作用。如果要添加多个数组,我会收到错误linkLineItems.push不是一个函数
,但我认为可以使用.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]);
}
}
编辑#2:作为数据传递到函数中的示例数据
[{
itemname: "Hello World",
itemtype: "activity",
activitiesafter: ["Do Stuff", "Do Other Stuff"]
}]
推送功能仅适用于数组,而不适用于对象
由于我看不出有任何理由
linkLineItems
需要成为一个对象,我建议您通过使用let linkLineItems=[]初始化它,将其设置为一个数组代码>一些自封的最佳实践:
在不需要索引时,尽可能避免循环。(参见和类似内容)。这样可以减少污染眼睛的变量
提前“继续”或“返回”以避免嵌套内容(例如返回链接
优先)
尽量减少变量的最大范围。这也是通过使用forEach实现的
函数名toolong(数据、现有链接、链接设置器){
const moreLinks=data.reduce((链接,项目)=>{
if(项目活动[0]=“默认值”){
返回链接
}
item.activitiesafter.forEach(活动=>{
links.push({
来源:item.itemname,
目标:活动,
类型:“活动之后的活动”
})
})
返回链接
}, [])
返回linkSetter(=>existingLinks.concat(moreLinks))
}
名图隆([{
项目名称:“你好,世界”,
itemtype:“活动”,
活动之后:[“做事情”,“做其他事情”]
},{
itemname:“应该忽略”,
itemtype:“活动”,
activitiesafter:[“默认”,“无任何内容”]
}],['toto'],(fn)=>console.log('newlinks:',fn())
您不能推送到对象上。改为设置属性linkLineItems.something=[]
push
只能在数组上使用。如果您添加一些示例输入/输出数据,这将非常有用。要准确地说出你想要的行为有点困难here@schu34我添加了示例数据。该函数需要能够一次添加多个数组(基于
for
循环的之后的活动。@usernick我不是在讨论您的问题,我是说调用linkSetter等不是您遇到的问题。您遇到的困难只是根据作为参数传递的数据构建linkLineItems。所有上下文都没有那么有用。这两件事很重要(我们遗漏的)是数据的内容(如果需要是console.log(JSON.stringify(data))以及应显示的预期linkLineItemsconstructed@grodzi我在主帖子中添加了edit#2以显示传递到函数中的数据
,我对原始帖子进行了一些更新以提供更多上下文,但使用[]初始化数组
似乎不会产生向父对象添加多个数组所需的结果。这太棒了,我不知道flatMap
。但是,我得到了错误data。在将函数插入我的应用程序时,flatMap不是一个函数。这很奇怪,因为我可以console.log(数据)
,将其作为变量存储在控制台中,然后使用数据。flatMap
在控制台中工作。有什么想法吗?回答我上次评论中的问题。如果我通过在[]
中包装数据来实例化数组,它就可以工作了。因此,函数以const moreLinks=[data]。flatMap(项=>{
@userNick如果数据不是数组(在您的实际工作案例中),那么您不需要迭代数据,只需处理普通对象即可!
[{
itemname: "Hello World",
itemtype: "activity",
activitiesafter: ["Do Stuff", "Do Other Stuff"]
}]