如何按照包含每个对象中存在的属性的唯一值的另一个数组的顺序对对象数组进行排序?

C_s*_*arp 1 javascript object underscore.js

我有两个数组,我想将它们合并为一个对象.我举了一些例子,说明了我拥有的和想要实现的目标.我试过_.union几个其他的下划线方法.

var original = [
  {
    Country: 'US',
    value: '10'
  },
  {
    Country: 'Turkey',
    value: '5'
  }
];

var newlist =["Afghanistan", "Antarctica","Turkey"]
Run Code Online (Sandbox Code Playgroud)

我想要的结果:

var results= [
  {
    Country: 'Afghanistan',
    value: '0'
  },
  {
    Country: 'Antarctica',
    value: '0'
  },
  {
    Country: 'Turkey',
    value: '5'
  }
];
Run Code Online (Sandbox Code Playgroud)

由于新名单没有美国,美国不会出现在最终结果中.因此,基本上新列表中的所有值都将显示在结果中,并带有原始列表中的值.

nnn*_*nnn 5

一个非Underscore解决方案,即.map()新数组,如果可以.find(),则返回原始数组中的对象,否则返回一个新对象:

var original = [
  { Country: 'US', value: '10' },
  { Country: 'Turkey', value: '5' }
];

var newlist =["Afghanistan", "Antarctica","Turkey"]

var result = newlist.map(function(v) {
  return original.find(function(o) { return o.Country === v })
      || { Country: v, value: '0' }
})

console.log(result)
Run Code Online (Sandbox Code Playgroud)

它是带有ES6箭头功能的单线程:

var original = [
  { Country: 'US', value: '10' },
  { Country: 'Turkey', value: '5' }
];

var newlist =["Afghanistan", "Antarctica","Turkey"]

var result = newlist.map(v => original.find(o => o.Country===v) || {Country:v, value:'0'})

console.log(result)
Run Code Online (Sandbox Code Playgroud)