我想用这种格式的数据进行API调用。
[{"Id":10, “FolderID”:22},{"Id":12, “FolderID”:22}]
我下面有这些不同的数据源:(使用redux)
const FolderId = indexes.currentFolder.id;
这是一个常数值
const documentsId = indexes.copyDocuments;
这是8、9、10的格式
我试图通过遍历documents数组来实现它 与foreach。
我知道如何附加数据的唯一方法是使用数组,但这不是我想要的,因此每个循环都会创建一个新数组。
const data = [];
documentsId.forEach(function(doc){
data.push(`"Id":${doc},"FolderID":${FolderId}`)
})
有人知道这样做的方法吗?谢谢。
答案 0 :(得分:2)
我相信您正在寻找的是地图原型
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
地图要做的是从原始数组中返回一个新数组,因此在您的示例中,我们有一个
数组[8, 9, 10]
我们以与使用forEach
的方式进行映射,即先传递项目,然后传递索引
const newArray = [8, 9, 10].map(function (item, index) {
return [item, index]
})
// [[8, 0], [9, 1], [10, 2]]
地图原型返回一个NEW数组,因此无需复制您的数组即可使其不发生变异,这使地图原型不可变
const documentsId = [8, 9, 10]
/* however you get your folderId */
const folderId = 22;
const mappedToObjectArray = documentsId.map(id => ({id, folderId}))
/*
If you're used to es5 this might look more familiar
function formatData() {
return documentsId.map(function (doc) {
return {
id: doc,
folderId: folderId
}
})
}
*/
console.log(mappedToObjectArray)
如果我误解了,或者您对任何乐于助人的事情感到困惑,请告诉我。
答案 1 :(得分:1)
当您想要的是 objects 时,传递给data
数组的东西是 strings 。代替:
data.push(`"Id":${doc},"FolderID":${FolderId}`)
.... do:
data.push({ Id: doc, FolderID: FolderId })
...和data
将是对象的数组,而不是 strings 。
我还建议使用map
之类的@JoeWarner,这是构建数组的一种更为简洁的方法。
const data = documentsId.map(doc => ({ Id: doc, FolderID: FolderId }))