【问题标题】:loop over array of objects based on the keywords基于关键字循环对象数组
【发布时间】:2018-04-06 03:50:06
【问题描述】:

按一定的顺序对对象数组进行排序。

var details = [{
"name": "john",
"place":"new york"
},{
"name": "mark",
"place":"chicago"
},{
"name": "tom",
"place":"san jose"
},{
"name": "dansk",
"place":"new jersey"
}],

地图应该按以下顺序显示一个列表,基本上我们需要决定输出的模式,我们应该可以改变顺序:

san jose,
new york,
chicago,
new jersey

我试过了:

details.sort((a, b)=> a.place - b.place)).map((data) => {
return(
 <div>
   <li>{data.place}</li>
 </div>
)})

【问题讨论】:

  • 您期望"string" - "string" 的结果是什么? - 尝试使用字符串localeCompare 方法
  • 这没有任何意义。你能指出在这种情况下比较两个字符串的规则吗?不知道约束是不可能编写程序的。

标签: javascript arrays loops sorting object


【解决方案1】:

对于基于其他数组的排序数组,您可以使用此代码

var details = [{
    "name": "john",
    "place": "new york"
}, {
    "name": "mark",
    "place": "chicago"
}, {
    "name": "tom",
    "place": "san jose"
}, {
    "name": "dansk",
    "place": "new jersey"
}];

var sortingArray = ["san jose", "new york", "chicago", "new jersey"];


var result = [];



sortingArray.forEach(function (key) {
    var found = false;
    details = details.filter(function (item) {
        if (!found && item.place == key) {
            result.push(item);
            found = true;
            return false;
        } else
            return true;
    })
})

console.log(result);

重新排列数组后可以映射

result.map((data) => {
   return (
       <div>
           <li>{data.place}</li>
       </div>
   )
})

【讨论】:

  • 这将按字母顺序给出,但我们需要按提到的顺序,如圣何塞、纽约、芝加哥、新泽西
  • 什么样的订单?这是你的另一个像这样的顺序[“圣何塞”,“纽约”,“芝加哥”,“新泽西”]?
  • @Mark 我已经在回答中更新了我的代码。请检查。
  • @Mark 如果回答有用,请您将此答案标记为正确。
【解决方案2】:

我没有看到这些项目的排序顺序有任何逻辑,所以我会使用一个定义排序顺序的列表。

let order = ["san jose", "new york", "chicago", "new jersey"];

var details = [{
    "name": "john",
    "place": "new york"
  },
  {
    "name": "mark",
    "place": "chicago"
  },
  {
    "name": "tom",
    "place": "san jose"
  },
  {
    "name": "dansk",
    "place": "new jersey"
  }]
  .sort((a,b) => order.indexOf(a.place) - order.indexOf(b.place));
  
console.log(details);

【讨论】:

    猜你喜欢
    • 2012-10-14
    • 2020-09-08
    • 1970-01-01
    • 2021-03-08
    • 2022-06-15
    • 2022-12-18
    • 1970-01-01
    • 2021-04-06
    • 2014-05-25
    相关资源
    最近更新 更多