2016-07-27 1 views
2

Это мои статические значения которых имеют идентификатор с именами:Сравнивая два массива объектов в JavaScript

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" ] ] 
] 

Моего выходе должны быть так:

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

Что я пытаюсь сделать здесь, я должен сравнить staticValues и myReturnedValues и возвращать имена в отношении их идентификаторов вместо того, чтобы возвращать только идентификаторы в одиночку. Я попробовал еще несколько способов с помощью 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(){ 
 
       \t var myReturnedValues =mainSteps.map(x => [x.steps.map(y => y.category+"\n"+"\n"+"\n")]); 
 
       \t //return myReturnedValues; 
 
       \t console.log('meeee before',angular.toJson(myReturnedValues)); 
 
       \t newval = {}; 
 
       \t $.each(staticValues ,function(i,v) { 
 
       \t \t console.log('meeee staticCategories',angular.toJson(staticValues)); 
 
       \t newval[v.id] = v.name; 
 
       \t }); 
 

 

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

ответ

1

Попробуйте следующие циклы:

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/

+0

Я попробовал, что сейчас, и мой выход [[[NULL, NULL]], [[ null, null]], [[null, null]]], –

+0

Как вы можете видеть в моем jsfiddle работает, у вас должна быть другая проблема в вашем коде – madalinivascu

+0

Почему вы обертываете массив в массиве '[[" 2 " , "4"]], '? – madalinivascu

1

С подчеркиванием вы можете попробовать, как это:

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>

+0

, Когда я пытаюсь это сказать, «имя не определено» !!!! что может быть проблемой приятеля? –

 Смежные вопросы

  • Нет связанных вопросов^_^