繁体   English   中英

根据某个对象的属性在其内部移动数组对象

[英]Move array objects within itself according to a certain object's property

假设我们有一个对象数组,我们希望它将具有特定属性的一些对象移动到数组的开头,为了更清楚起见,我将举一个例子:

let arr = [
  {id:5 , tag: "X" , name:"mohsen"},
  {id:1 , tag: "A" , name:"hasan"},
  {id:3 , tag: "P" , name:"ali"},
  {id:8 , tag: "D" , name:"mehran"},
  {id:4 , tag: "C" , name:"nima"},
  {id:12 , tag: "A" , name:"keivan"},
  {id:6 , tag: "P" , name:"pedram"},
  {id:17 , tag: "X" , name:"masoud"},
  {id:20 , tag: "D" , name:"hadi"},
];

此时如果我们想移动带有tag:"P"到数组的开头,如下所示:

[
  {id: 3 ,name: "ali",tag: "P"}, 
  {id: 6,name: "pedram",tag: "P"},
  {id: 5,name: "mohsen",tag: "X"},
  {id: 1,name: "hasan",tag: "A"},
  {id: 8,name: "mehran",tag: "D"}, 
  {id: 4,name: "nima",tag: "C"}, 
  {id: 12,name: "keivan",tag: "A"},
  {id: 17,name: "masoud",tag: "X"},
  {id: 20,name: "hadi",tag: "D"}
]

我们应该做什么?

有关更多描述,首先我们在数组上使用 map 然后对于数组的每个项目我们检查item[propName] === propValue条件是否为真然后我们使用const b = arr.splice(index, 1); 并将它放在数组的开头arr.splice(place,0,...b); place变量跟踪数组开头的新索引。

 let arr = [ {id:5, tag: "X", name:"mohsen"}, {id:1, tag: "A", name:"hasan"}, {id:3, tag: "P", name:"ali"}, {id:8, tag: "D", name:"mehran"}, {id:4, tag: "C", name:"nima"}, {id:12, tag: "A", name:"keivan"}, {id:6, tag: "P", name:"pedram"}, {id:17, tag: "X", name:"masoud"}, {id:20, tag: "D", name:"hadi"}, ]; function reorderListByProp(propName, propValue) { const rem = []; let place = 0; arr.map((item, index) => { if(item[propName] === propValue) { const b = arr.splice(index, 1); arr.splice(place,0,...b); place++; } }); return arr; } console.log(reorderListByProp('tag', 'P'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM