以内插顺序将项目推送到数组

Pushing items to array in an interpolated order

我有一个对象数组,我正在尝试在一个新数组中插入数据。

这是数组,可能有两个或更多对象:

const param = [{
    sortType: "ascending",
    sortField: "id",
  },
  {
    sortType: "descending",
    sortField: "title",
  },
];


let sortFields = [];
let sortTypes = [];
let sortString = [];

//iterates the sort params
for (let p of param) {
  sortFields.push(p.sortField);
  sortTypes.push(p.sortType);
}

for (let st of sortTypes) {
  sortString.push(st === "ascending" ? "+" : "-");
  for (let sf of sortFields) {
    sortString.push(sf);
  }
}
console.log({
  sortString
})

我打算做的是拥有一个具有以下输出的数组: ["+id","-title"]

目前我被两个内插的 for 循环困住了,它们做了一些非常不同的事情。 我已经尝试标记循环并在内部循环中使用 continue 关键字,但仍然给我一个非常不同的输出。

关于如何实现这一点有什么建议吗? 也许分别对两个数组进行循环,然后创建一个新循环来插入和连接数组中的字符串?

感谢任何帮助!

您可以使用Array#map将每个条目变成您想要的字符串。

如果您要遍历循环并将项目推送到数组,很可能可以使用 Array#map.

以更简洁的方式完成

const param = [{
    sortType: "ascending",
    sortField: "id",
  },
  {
    sortType: "descending",
    sortField: "title",
  },
];

const sortString = param.map((p) => {
   return p.sortType === "ascending" ? `+${p.sortField}` : `-${p.sortField}`
 });
console.log({
  sortString
})

你循环太多了。您可以简单地使用 Array.prototype.map 函数:

param.map(el => (el.sortType === 'ascending' ? '+' : '-') + el.sortField)