Как отсортировать значения массива по значению другого массива - PullRequest
0 голосов
/ 19 сентября 2018
list1 = [{name: 'apple'}, {name: 'pear'}, {name: 'banana'}]
list2 = ['banana', 'apple', 'pear']

ожидание

list1 = [{name: 'banana'}, {name: 'apple'}, {name: 'pear'}]

Как сделать list2 и отсортировать list1 через angularjs ng-repeat или JS

Ответы [ 5 ]

0 голосов
/ 19 сентября 2018

И карта решения

var list1=[{
  name: 'apple'
}, {
  name: 'pear'
}, {
  name: 'banana'
}];
var list2 = ['banana', 'apple', 'pear'];

list1 = list2.map(x=>{
return {name:x};
});

console.log(list1);
0 голосов
/ 19 сентября 2018

Используйте функцию compare, как показано ниже:

var list1 = [{name: 'apple'}, {name: 'pear'}, {name: 'banana'}];
var list2 = ['banana', 'apple', 'pear'];

function comp(a, b) {
  return list2.indexOf(a.name) - list2.indexOf(b.name);
}

list1.sort(comp);

console.log(list1);
0 голосов
/ 19 сентября 2018

Попробуйте с этим:

$scope.props = [{name: 'apple'}, {name: 'pear'}, {name: 'banana'}]

ng-repeat="prop in props | orderBy:'name'"
0 голосов
/ 19 сентября 2018

На основании того, что у вас есть и что вы хотите иметь.Вот как вы получаете.

list1 = [{name: 'apple'}, {name: 'pear'},{name: 'banana'}];
list2 = ['banana', 'apple', 'pear'];
var result = [];
function getData(){
list2.forEach(function(e){
  let obj=list1.find(element=>element['name'] === e);
  result.push(obj);
})
console.log(result);
}
getData();
// In case you want to preserve with list1
list1.sort(function(a, b){  
  return list2.indexOf(a.name) - list2.indexOf(b.name);
});
console.log(list1)

Теперь вы можете использовать result как внутри ng-repeat;

0 голосов
/ 19 сентября 2018

Вы можете использовать индекс массива list2, чтобы получить числовые значения для сортировки:

var list1 = [{
  name: 'apple'
}, {
  name: 'pear'
}, {
  name: 'banana'
}]
var list2 = ['banana', 'apple', 'pear'];
list1.sort(function(a, b) {
  return list2.indexOf(a.name) - list2.indexOf(b.name);
});
console.log(list1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...