【问题标题】:Sort array of objects by value in array of each object按每个对象数组中的值对对象数组进行排序
【发布时间】:2019-11-02 22:30:43
【问题描述】:

我不确定我是否正确地写了这个问题,但是.. 我有这个对象数组:

[
 {
   foo: 'Google',
   bar: 'Bing',
   pro: [
      'One',
      'Two',
      'Three'
   ]
 },
 {
   foo: 'Random string',
   bar: 'Something',
   pro: [
      'Five'
   ]
 },
 {
   foo: 'String',
   bar: 'Game',
   pro: [
      'Ten',
      'One'
   ]
 },

 // ...

]

我需要按pro 属性对其进行排序,其中任何数组元素都包含text。数组元素个数未知,但至少1个。

我的逻辑卡住了:

var text = 'On';

var results = arr.sort(function(a, b) {
  // do another loop, than count and than check?
});

在本例中,排序功能成功后,对象的顺序应该变为0, 3, 23, 0, 3,因为On存在于其中两个中。

感谢您的帮助

【问题讨论】:

  • 选择哪个先来的规则应该是什么?
  • 没关系。这背后有更深层次的逻辑,但结果是这样,我需要对此进行排序。

标签: javascript arrays sorting object


【解决方案1】:

您可以编写一个简短的函数来检查一个值是否以text 的值开头,然后在您的排序函数中将其用作pro.some() 的输入,将b 排序在a 之前以降序排序顺序。

const arr = [{
    foo: 'Google',
    bar: 'Bing',
    pro: [
      'One',
      'Two',
      'Three'
    ]
  },
  {
    foo: 'Random string',
    bar: 'Something',
    pro: [
      'Five'
    ]
  },
  {
    foo: 'String',
    bar: 'Game',
    pro: [
      'Ten',
      'One'
    ]
  }
];
const text = 'On';
const hastext = v => v.indexOf(text) == 0;

arr.sort((a, b) =>
  b.pro.some(hastext) - a.pro.some(hastext)
);

console.log(arr);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2020-07-11
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多