Из массива удаляют дубликаты данных имени другого массива - PullRequest
0 голосов
/ 06 июля 2018

У меня есть два массива: один - исходный массив, а второй - копия исходного массива. Я помещаю некоторые новые элементы в массив и обновляю некоторые из них и хочу сравнить его с массивом копирования и хочу исключить те элементы, которые находятся в массиве копирования, и сохранить эти элементы там, где Id = null

 var original = [
    {
        "Id": 1,
        "BrandConstruct": 265,
        "YearPlanData": "a"
    },
    {   "Id": 2,
        "BrandConstruct": 236,
        "YearPlanData": "c"
    },
    {   "Id": 3,
        "BrandConstruct": 376,
        "YearPlanData": "b"
    },
    {   "Id": null,
        "BrandConstruct": 476,
        "YearPlanData": "e"
    }, 
    {   "Id": null,
        "BrandConstruct": 576,
        "YearPlanData": "f"
    }

]

    var copy = [
    {
        "Id": 1,
        "BrandConstruct": 165,
        "YearPlanData": "a"
    },
    {   "Id": 2,
        "BrandConstruct": 236,
        "YearPlanData": "c"
    },
    {   "Id": 3,
        "BrandConstruct": 376,
        "YearPlanData": "b"
    }

]

Это два массива со свойствами Id, BrandConstruct, YearPlanData. Я добавляю новый элемент или могу быть несколькими элементами, где все будут иметь Id = null, а другие свойства будут иметь какие-либо данные или могут быть дублирующими данными, поэтому я хочу исключить дублирующиеся данные. используя копию массива, но храните данные, где Id = null поэтому я хочу этот тип результата после сравнения, и он должен работать на IE

    var original = [
    {
        "Id": 1,
        "BrandConstruct": 265,
        "YearPlanData": "a"
    },

    {   "Id": null,
        "BrandConstruct": 476,
        "YearPlanData": "e"
    }, 
    {   "Id": null,
        "BrandConstruct": 576,
        "YearPlanData": "f"
    }

]

Ответы [ 4 ]

0 голосов
/ 06 июля 2018

Это работает, но я думаю, вам следует подождать лучшего решения.

var original = [{
  "Id": 1,
  "BrandConstruct": 265,
  "YearPlanData": "a"
}, {
  "Id": 2,
  "BrandConstruct": 236,
  "YearPlanData": "c"
}, {
  "Id": 3,
  "BrandConstruct": 376,
  "YearPlanData": "b"
}, {
  "Id": null,
  "BrandConstruct": 476,
  "YearPlanData": "e"
}, {
  "Id": null,
  "BrandConstruct": 576,
  "YearPlanData": "f"
}];

var copy = [{
  "Id": 1,
  "BrandConstruct": 165,
  "YearPlanData": "a"
}, {
  "Id": 2,
  "BrandConstruct": 236,
  "YearPlanData": "c"
}, {
  "Id": 3,
  "BrandConstruct": 376,
  "YearPlanData": "b"
}];
copy = copy.map(function(el) {
  return JSON.stringify(el);
});

original = original.map(function(el) {
  return JSON.stringify(el);
}).filter(function(els) {
  return copy.indexOf(els) == -1;
}).map(function(s) {
  return JSON.parse(s);
});
console.log(original);
0 голосов
/ 06 июля 2018

const newOriginal = original.filter(obj => {
    return !copy.find(copyObj => JSON.stringify(copyObj) === JSON.stringify(obj))
});

Это должно работать в Internet Explorer:

const newOriginal = original.filter(function(obj) {
    return !copy.filter(function(copyObj) { return JSON.stringify(copyObj) === JSON.stringify(obj)}).length
});
0 голосов
/ 06 июля 2018

Это для массива объектов, вы можете поместить их в пустой массив, когда индекс искомого атрибута не найден, создав новый массив уникальных значений:

   for (var key in array_of_objects) {
     var index = empty_array.findIndex(x => x.attribute == array_of_objects.attribute)
        if (index === -1){
            empty_array.push(d);
        }
   }
0 голосов
/ 06 июля 2018

Вы можете перебрать массив original и передать элементы, которые не принадлежат массиву copy, в новый массив.

function isInArray(item, array) {
  return JSON.stringify(array).indexOf(JSON.stringify(item)) > -1
}

function getFilteredArray(original, copy) {
  var newOriginal = [];

  for (var i = 0; i < original.length; i++) {
    var item = original[i];
    if (!isInArray(item, copy) || item.id === null) newOriginal.push(item);
  }

  return newOriginal;
}

var original = [{
    "Id": 1,
    "BrandConstruct": 265,
    "YearPlanData": "a"
  },
  {
    "Id": 2,
    "BrandConstruct": 236,
    "YearPlanData": "c"
  },
  {
    "Id": 3,
    "BrandConstruct": 376,
    "YearPlanData": "b"
  },
  {
    "Id": null,
    "BrandConstruct": 476,
    "YearPlanData": "e"
  },
  {
    "Id": null,
    "BrandConstruct": 576,
    "YearPlanData": "f"
  }

]

var copy = [{
    "Id": 1,
    "BrandConstruct": 165,
    "YearPlanData": "a"
  },
  {
    "Id": 2,
    "BrandConstruct": 236,
    "YearPlanData": "c"
  },
  {
    "Id": 3,
    "BrandConstruct": 376,
    "YearPlanData": "b"
  }

]

console.log(getFilteredArray(original, copy));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...