比较 javascript 中的两个对象数组

Comparing two array of objects in javascript

这是我的静态值,其 ID 名称为:

var staticValues = [
  { "id": "1", "name": "PEKKA" },
  { "id": "2", "name": "Golem" },
  { "id": "3", "name": "Vigilane" },
  { "id": "4", "name": "SpiderMan" },
  { "id": "5", "name": "Archer" },
  { "id": "6", "name": "SuperMan" }
]

这是我的方法 returned 值:

var myReturnedValues = [
  [ [ "2", "4" ] ],
  [ [ "5", "5" ] ],
  [ [ "1", "3" ] ],
  [ [ "4", "3" ] ]
]

我的输出需要是这样的:

var myReturnedValues = [
  [ [ "Golem", "SpiderMan" ] ],
  [ [ "Archer", "Archer" ] ],
  [ [ "PEKKA", "Vigilante" ] ],
  [ [ "SpiderMan", "Vigilante" ] ]
]

我想在这里做的是我必须比较 staticValuesmyReturnedValues 和 return 名称相对于他们的 id 而不是 return 只比较 id .我用 underscore.js 尝试了更多方法但失败了。有人可以给我一些想法吗?

我的方法是这样的:

var staticValues = [ /* here I have the whole static data */ ];

$scope.getCategories = function() {
    var myReturnedValues = mainSteps.map(x => [x.steps.map(y => y.category)]);
    return myReturnedValues;
}

代码编辑后 ,

$scope.getCategories =function(){
                  var myReturnedValues =mainSteps.map(x => [x.steps.map(y => y.category+"\n"+"\n"+"\n")]);
                  //return myReturnedValues;
                  console.log('meeee before',angular.toJson(myReturnedValues));
                  newval = {};
                  $.each(staticValues ,function(i,v) {
                   console.log('meeee staticCategories',angular.toJson(staticValues )); 
                    newval[v.id] = v.name;
                  });


                  $.each(myReturnedValues,function(i,v){
                     $.each(v[0],function(x,t){
                      myReturnedValues[i][0][x] = newval[t];
                    });
                  });
                  console.log('meeee after',angular.toJson(myReturnedValues));
                  return myReturnedValues;
                 }

首先将 staticValues 转换为 key => value 对象:

names = {}
staticValues.forEach(obj => names[obj.id] = obj.name);

然后迭代 myReturedValues 并在进行时用名称替换 ID:

var staticValues = [
  { "id": "1", "name": "PEKKA" },
  { "id": "2", "name": "Golem" },
  { "id": "3", "name": "Vigilane" },
  { "id": "4", "name": "SpiderMan" },
  { "id": "5", "name": "Archer" },
  { "id": "6", "name": "SuperMan" }
]

var myReturnedValues = [
  [ [ "2", "4" ] ],
  [ [ "5", "5" ] ],
  [ [ "1", "3" ] ],
  [ [ "4", "3" ] ]
]

names = {}
staticValues.forEach(x => names[x.id] = x.name)

res = myReturnedValues.map(sub =>   
    [sub[0].map(id => names[id])]
)

console.log(res)

尝试以下循环:

newval = {};
$.each(staticValues,function(i,v) {
  newval[v.id] = v.name;
});

var myReturedValues = [
  [ [ "2", "4" ] ],
  [ [ "5", "5" ] ],
  [ [ "1", "3" ] ],
  [ [ "4", "3" ] ]
];
$.each(myReturedValues,function(i,v){
   $.each(v[0],function(x,t){
    myReturedValues[i][0][x] = newval[t];
  });
});

演示:https://jsfiddle.net/cgk478g8/

有下划线的你可以这样试试:

var staticValues = [
  { "id": "1", "name": "PEKKA" },
  { "id": "2", "name": "Golem" },
  { "id": "3", "name": "Vigilane" },
  { "id": "4", "name": "SpiderMan" },
  { "id": "5", "name": "Archer" },
  { "id": "6", "name": "SuperMan" }
];

var myReturedValues = [
  [ [ "2", "4" ] ],
  [ [ "5", "5" ] ],
  [ [ "1", "3" ] ],
  [ [ "4", "3" ] ]
];
var data = _.chain(myReturedValues).map(function(d) {
  //map the myReturedValues
  return d[0].map(function(id) {
    //use underscore to search in the staticValues and return name
    return _.find(staticValues, function(svalue) {
      return svalue.id == id
    }).name
  });
}).value();

console.log(data)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>