Как вставить несколько значений в массив? - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть один массив arrayPath I push несколько значений в arrayPath, который появляется в следующем коде singleFile.originalFilename имеет повторяющиеся (что показано в консоли) значения, когда singleFile.originalFilename дублируют значения, дублирующие значение Iне хотите нажать arrayPath как это возможно?

Я пытался с приведенным ниже кодом, но я не получил правильный результат.

var arrayPath = [];
console.log(singleFile.originalFilename); // '3.jpg','5.jpg','3.jpg','3.jpg','8.jpg'
console.log(singleFile.size);  // '1345','5778','1345','1345','7777'

for(i=0; i < files.uploadFiles.length; i++){

  singleFile=files.uploadFiles[i];
  if(arrayPath.indexOf(singleFile.originalFilename) === -1){
    arrayPath.push([singleFile.originalFilename,singleFile.size,'true']);
  }else{
    console.log("some singleFiles are duplicate");
  }
}
console.log(arrayPath);

Ответы [ 4 ]

0 голосов
/ 04 декабря 2018

Я надеюсь, что у вас есть массив объектов, как показано ниже, где вы можете написать функцию, которая принимает массив и свойство.

На основе свойства вы можете фильтровать массив.поэтому, проверив, вы можете удалить дубликаты и вернуть новый массив.мы можем использовать array.filter

Я надеюсь, что приведенный ниже код решит проблему.Поскольку это функция, вы можете использовать ее несколько раз и фильтровать любое свойство в массиве.

let singleFile = [{fileName: "3.jpg", size: 1234}, {fileName: "4.jpg", size: 1236},
{fileName: "5.jpg", size: 1237},
{fileName: "3.jpg", size: 1234},
{fileName: "3.jpg", size: 1234}]

// method accepts array and property
// you can check with property on the array and remove  duplicates from array and return a new array
const removeDuplicates = (array, property) => {
 let uniq = {}
 return array.filter(obj => !uniq[obj[property]] && (uniq[obj[property]] = true))
}


console.log(removeDuplicates(singleFile, "fileName"))
0 голосов
/ 04 декабря 2018

У вас должен быть такой код.

var arrayPath = [];
console.log(singleFile.originalFilename); // '3.jpg','5.jpg','3.jpg','3.jpg','8.jpg'
console.log(singleFile.size);  // '1345','5778','1345','1345','7777'

for(i=0; i < files.uploadFiles.length; i++){

  singleFile=files.uploadFiles[i];
  if(!this.isArrayDataUnique(singleFile.originalFilename)){
    let obj = {
      filename: singleFile.originalFilename,
      size: singleFile.size,
      status: 'true'
    };
    arrayPath.push(obj);
  }else{
    console.log("some singleFiles are duplicate");
  }
}
console.log(arrayPath);

function isArrayDataUnique(originalFileName){

 let filters = arrayPath.filter(item => item.filename === originalFileName);
 return filters.length;
}
0 голосов
/ 04 декабря 2018

Предполагая, что файлы имеют следующую структуру, вы можете сделать:

const files = {
  uploadFiles: [{originalFilename: '3.jpg', size: 1345}, {originalFilename: '5.jpg', size: 5778}, {originalFilename: '3.jpg', size: 1345}, {originalFilename: '3.jpg', size: 1345}, {originalFilename: '8.jpg', size: 7777}]
};
const uniqueFilesMap = files.uploadFiles.reduce((map, current) => {
  map.set(current.originalFilename, [current.originalFilename, current.size, 'true']);
  return map;
}, new Map());
const result = [...uniqueFilesMap.values()]; // [["3.jpg",1345,"true"],["5.jpg",5778,"true"],["8.jpg",7777,"true"]]
0 голосов
/ 04 декабря 2018

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

const x = new Set([1,2,2,4,5,5])
console.log([...x.values()]) // [1,2,4,5]

Более подробную информацию вы можете найти в документации Mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...