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进行了进一步解释,它可以工作,但当我有几个包含对象文件的数组时,它就不工作了。