如何在数组中推送多个值?

时间:2018-12-04 10:46:31

标签: javascript node.js angular

我有一个数组arrayPath,我pusharrayPath中有多个值,在以下代码中singleFile.originalFilename出现重复值(在控制台中显示),当{ {1}}个重复的值我不想输入的重复值singleFile.originalFilename怎么可能?

我尝试使用下面的代码,但没有得到正确的结果。

arrayPath

4 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:1)

假设文件具有以下结构,则可以执行以下操作:

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

答案 2 :(得分:1)

我希望您有一个如下所示的对象数组,您可以在其中编写一个接受该数组和一个属性的函数。

基于该属性,您可以过滤数组。因此,通过检查您可以删除重复项并返回一个新数组。我们可以使用array.filter

我希望以下代码能解决该问题。由于它具有函数功能,因此可以多次使用它,并且可以过滤数组中的任何属性。

@TestPropertySource

答案 3 :(得分:0)

您需要具有这样的代码。

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;
}