Javascript 迭代和变换数组中的对象
从数据库中我得到:Javascript 迭代和变换数组中的对象,javascript,database,angular,Javascript,Database,Angular,从数据库中我得到: "Data": [{ "mainData": [{ "_id": ObjectId("5ab63b22d012ea2bc0bb7e9b"), "date": "2018-03-24" }], "files": [ { "_id": ObjectId("5ab63b22d012ea2bc0bb7e9d"), "filename": "file-1521892130284.png", "path": "upl
"Data": [{
"mainData": [{
"_id": ObjectId("5ab63b22d012ea2bc0bb7e9b"),
"date": "2018-03-24"
}],
"files": [
{
"_id": ObjectId("5ab63b22d012ea2bc0bb7e9d"),
"filename": "file-1521892130284.png",
"path": "uploads\\file-1521892130284.png"
},
{
"_id": ObjectId("5ab63b22d012ea2bc0bb7e9c"),
"filename": "file-1521892130285.png",
"path": "uploads\\file-1521892130285.png"
}
]
}]
但我需要在上面进行这样的转换:
this.galleryImages = [
{
small: 'file-1521892130284.png'
},
{
small: 'file-1521892130285.png'
}
];
如何更好地迭代某些文件路径并将其完全推送到demand gallery Images对象?
galleryImages-Angular的ngx库。首先使用
var Data=JSON.parse(str)解析JSON代码>
然后,创建一个新对象var galleryImage=[]
并在数据数组中迭代
for(var i =0; i < Data.files.length; i++)
galleryImages[i] = { small : Data.files[i].filename }
for(var i=0;i
对于所有文件名的数组,您需要迭代数据
和文件的内部数组
。然后构建新对象并通过减少外部数组映射内部结果
使用的方法:
- 对于以数组作为起始符的外部数组
- 用于获取对象的单个属性的
- 用于合并两个阵列
- 用于获取想要重命名的属性为的新对象
函数ObjectId(v){return v;}
var$scope={“Data”:[{“mainData”:[{“_id”:ObjectId(“5ab63b22d012ea2bc0bb7e9b”),“date:“2018-03-24”},“files:[{“_id”:ObjectId(“5ab63b22d012ea2bc0bb7e9d”),“filename:“file-1521892130284.png”,“path:“uploads\\file-1521892130284.png”,{“{“\u id”:ObjectId:“5AB63B22D012EAC07BB9C”),“filename:“file-1521890285.png”,“path:”“上载\\file-1521892130285.png”}]}]},
数组=$scope.Data.reduce(
(r,{files})=>r.concat(files.map({filename:short})=>({short})),
[]
);
console.log(数组);
.as控制台包装{最大高度:100%!重要;顶部:0;}
constobjectid=(v)=>v;//虚拟实现
const dbResponse={“数据”:[{
“mainData”:[{
“_id”:ObjectId(“5ab63b22d012ea2bc0bb7e9b”),
“日期”:“2018-03-24”
}],
“文件”:[
{
“_id”:ObjectId(“5ab63b22d012ea2bc0bb7e9d”),
“文件名”:“文件-1521892130284.png”,
“路径”:“上载\\file-1521892130284.png”
},
{
“_id”:ObjectId(“5ab63b22d012ea2bc0bb7e9c”),
“文件名”:“文件-1521892130285.png”,
“路径”:“上载\\file-1521892130285.png”
}
]
},
]}
/*我们得到一个“文件”数组*/
const allFiles=dbResponse.Data.map(x=>x.files)
/*
我们将文件数组映射到{“small”:…}
物体
*/
函数getFileName(文件){
返回files.map(keepOnlyFilename);
}
/*
我们拿一个物体,比如:
{
“_id”:ObjectId(“5ab63b22d012ea2bc0bb7e9d”),
“文件名”:“文件-1521892130284.png”,
“路径”:“上载\\file-1521892130284.png”
}
我们将其转化为:
{
“小”:“文件-1521892130284.png”
}
*/
函数keepOnlyFilename(obj){
返回{
“小”:obj.filename
};
}
/*我们将上述内容作为构建块组合在一起*/
const final=allFiles.map(getfilename);
console.log(最终版)
你从哪里得到'assets/1-small.jpg'
的数字,还是仅仅是递增的索引?使用魔法。这就是我从你在这里发布的内容中所能告诉你的。你的回答与所需的输出不匹配。为什么png
文件变成jpg
,并且具有不同的路径,或者这是不可逆的和应该的d使用原始路径+文件名?如果是后者,请改进它。我更改了它。现在可以了,它来自exapmes.Thx,它可以工作,但是当我有几个包含对象文件的数组时,我在一个数组中收到它,然后省略嵌套数组的“展平”以保持这种方式。可以吗?当我使用ommit“const flatten=allFiles.reduce((prev,x)=>prev.concat(x))“我收到:(2)[{…},{…}]0:{small:undefined}1:{small:undefined}length:2I更新了我的答案,用更简单的函数sthx进行了进一步解释,它可以工作,但当我有几个包含对象文件的数组时,它就不工作了。