Фильтрация списка объектов по идентификаторам в массиве в Jquery - PullRequest
1 голос
/ 20 марта 2020

У меня есть список объектов, и у каждого объекта есть определенный c код. Есть еще один массив с этими указанными c кодами, и я хочу получить все объекты, которые соответствуют кодам в массиве. Я пытался с помощью функции grep и метода indexOf, но я не получил никаких результатов. Может ли кто-нибудь помочь мне с этим?

    var selectedCodes = [2, 12, 15];

    var objArray = [
    {
        "ItemID": "1",
        "ItemName": "Name1",
        "ItemCode": "1",
    },
    {
        "ItemID": "2",
        "ItemName": "Name2",
        "ItemCode": "2",
    },
    {
        "ItemID": "3",
        "ItemName": "Name3",
        "ItemCode": "10",
    },
    {
        "ItemID": "4",
        "ItemName": "Name4",
        "ItemCode": "12",
    },
    {
        "ItemID": "5",
        "ItemName": "Name5",
        "ItemCode": "15",
    },
    {
        "ItemID": "6",
        "ItemName": "Name6",
        "ItemCode": "20",
    }
];

Согласно приведенному выше списку объектов и массиву, мне нужно получить объекты Name2, Name4, Name5 только в другой список. Ниже вы можете найти код, который я использую для этого. Но мне не повезло с этим

var selectedObjects = $.grep(objArray, function (e) {
    return selectedCodes.indexOf(e.ItemCode) > -1;
});

Ответы [ 5 ]

1 голос
/ 20 марта 2020

Вот вам go с решением

var selectedCodes = [2, 12, 15];

    var objArray = [
    {
        "ItemID": "1",
        "ItemName": "Name1",
        "ItemCode": "1",
    },
    {
        "ItemID": "2",
        "ItemName": "Name2",
        "ItemCode": "2",
    },
    {
        "ItemID": "3",
        "ItemName": "Name3",
        "ItemCode": "10",
    },
    {
        "ItemID": "4",
        "ItemName": "Name4",
        "ItemCode": "12",
    },
    {
        "ItemID": "5",
        "ItemName": "Name5",
        "ItemCode": "15",
    },
    {
        "ItemID": "6",
        "ItemName": "Name6",
        "ItemCode": "20",
    }
];

var filteredData = objArray.filter(function(item) {
  return (
    selectedCodes.indexOf(parseInt(item.ItemCode)) > -1
  );
});

console.log(filteredData);

Используйте filter для фильтрации соответствующих записей.

Ссылка: Документация фильтра

1 голос
/ 20 марта 2020

Для решения O(n) сначала создайте объект, ключами которого являются коды, затем .map the selectedCodes:

const objsByCode = {};
for (const item of objArray) {
  objsByCode[item.ItemCode] = item;
}
const result = selectedCodes.map(code => objsByCode[code]);

var selectedCodes = [2, 12, 15];

var objArray = [{
    "ItemID": "1",
    "ItemName": "Name1",
    "ItemCode": "1",
  },
  {
    "ItemID": "2",
    "ItemName": "Name2",
    "ItemCode": "2",
  },
  {
    "ItemID": "3",
    "ItemName": "Name3",
    "ItemCode": "10",
  },
  {
    "ItemID": "4",
    "ItemName": "Name4",
    "ItemCode": "12",
  },
  {
    "ItemID": "5",
    "ItemName": "Name5",
    "ItemCode": "15",
  },
  {
    "ItemID": "6",
    "ItemName": "Name6",
    "ItemCode": "20",
  }
];

const objsByCode = {};
for (const item of objArray) {
  objsByCode[item.ItemCode] = item;
}
const result = selectedCodes.map(code => objsByCode[code]);
console.log(result);

Нет необходимости в большой библиотеке, такой как jQuery, чтобы достичь чего-то такого тривиального.

0 голосов
/ 20 марта 2020

На самом деле вы можете добиться этого, просто изменив:

var selectedObjects = $.grep(objArray, function (e) {
    return selectedCodes.indexOf(e.ItemCode - 0) > -1;
});

Вы фактически сравниваете строку с числом. Преобразование ItemCode в Number решит это.

0 голосов
/ 20 марта 2020
const selectedObjects = objectArray.filter(
  obj => selectedCodes.includes(Number(obj.ItemCode))
)
0 голосов
/ 20 марта 2020

Вы можете сделать с простым для l oop logi c.,

  var selectedCodes = [2, 12, 15];

    var objArray = [
    {
        "ItemID": "1",
        "ItemName": "Name1",
        "ItemCode": "1",
    },
    {
        "ItemID": "2",
        "ItemName": "Name2",
        "ItemCode": "2",
    },
    {
        "ItemID": "3",
        "ItemName": "Name3",
        "ItemCode": "10",
    },
    {
        "ItemID": "4",
        "ItemName": "Name4",
        "ItemCode": "12",
    },
    {
        "ItemID": "5",
        "ItemName": "Name5",
        "ItemCode": "15",
    },
    {
        "ItemID": "6",
        "ItemName": "Name6",
        "ItemCode": "20",
    }
];
var selectedArra=[];
for(var i=0;i<selectedCodes.length;i++){
   for(var j=0;j<objArray.length;j++){
       if(parseInt(objArray[j].ItemCode)==selectedCodes[i]){
         selectedArra.push(objArray[j])
       }
   }
}
console.log(selectedArra)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...