用另一个数组对对象数组进行排序

时间:2018-08-01 13:28:01

标签: javascript jquery underscore.js

我有一个看起来像这样的对象数组。

var items = [
  {id: 1150, title: 'im tyler'},
  {id: 1195, title: 'im josh'}
];

另一个看起来像这样的数组:

var sortArray = [
'1195',
'1150'
];

我要完成的工作是基于排序数组的结果进行排序。因此,在这种情况下,items数组应将ID = 1195的对象排在列表的第一位。另外,如果sortArray中只有一个id,则应该只在items数组中显示该对象。

想要的结果:

var Newitems = [
  {id: 1195, title: 'im josh'}
  {id: 1150, title: 'im tyler'},
];

5 个答案:

答案 0 :(得分:2)

您可以遍历sort数组,并在每次迭代中找到源数组中的元素。如果找到,将结果推送到新数组。

尽管它会生成一个新数组,但请注意,这些项目仍引用原始数组。新数组仅包含对原始项目的引用。

var sortArray = [
  '1195',
  '1150'
];

var items = [
  {id: 1150, title: 'im tyler'},
  {id: 1195, title: 'im josh'}
];

var res = [];

sortArray.forEach(item => {
  res.push(items.find(i => i.id.toString() === item));
});

console.log(res);

答案 1 :(得分:1)

您可以从排序数组创建一个对象,然后使用该对象进行排序。

var items = [{id: 1150, title: 'im tyler'},{id: 1195, title: 'im josh'}];
var sortArray = ['1195','1150'].reduce((r, e, i) => Object.assign(r, {[e]: i}), {})
items.sort((a, b) => sortArray[a.id] - sortArray[b.id]);
console.log(items)

答案 2 :(得分:1)

看起来,您需要过滤对象数组,然后按sortArray的顺序对对象进行排序(顺便说一句,如果数据具有相同的类型会更容易)。

var items = [{ id: 1150, title: 'im tyler' }, { id: 1195, title: 'im josh' }],
    sortArray = ['1195', '1150'].map(Number),
    result = items
        .filter(({ id }) => sortArray.includes(id))
        .sort((a, b) => sortArray.indexOf(a.id) - sortArray.indexOf(b.id));
        
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 3 :(得分:0)

您可以使用array.sort和array.indexOf

        drawing.MouseWheel += new MouseWheelEventHandler(zoom);
        void zoom(object sender, MouseWheelEventArgs e)
        {
            Matrix m = drawing.RenderTransform.Value;
            Point p = e.GetPosition(drawing);
            if (e.Delta > 0)
            {
                m.ScaleAtPrepend(1.1, 1.1, p.X, p.Y);
            }
            else
            {
                m.ScaleAtPrepend(1 / 1.1, 1 / 1.1, p.X, p.Y);
            }
            drawing.RenderTransform = new MatrixTransform(m);

        }

答案 4 :(得分:0)

您可以使用地图和过滤器来做到这一点,就像这样:

var ordered = sortArray.map(id => {
    return items.filter(item => {
        return id == item.id
    });
});