Вход

Просмотр полной версии : Объединение [массив][массив] попарно в массив [key, value]


yozuul
12.11.2019, 17:14
Приветствую.
Получаю массивы в таком виде
[ 'file1 *** aea0f24263e5c7b9680fa16deb7e886086ba0bf1' ]
[ 'file1 *** aea0f24263e5c7b9680fa16deb7e886086ba0bf1' ]
[ 'file2 *** bc8d40d4173ca632deb8b4a696133a2d58d371a1' ]
[ 'file2 *** 88872614ff7f474d3605fed661ccd9eea1cf70b7' ]
Нужно по хешу сравнить файлы. Ничего кроме сравнения key != value не придумал, но никак не соображу, как их объединить попарно
{ 'file1 *** aea0f24263e5c7b9680fa16deb7e886086ba0bf1' : 'file1 *** aea0f24263e5c7b9680fa16deb7e886086ba0bf1' }
или так
[ 'file2 *** bc8d40d4173ca632deb8b4a696133a2d58d371a1', 'file2 *** 88872614ff7f474d3605fed661ccd9eea1cf70b7' ]

рони
12.11.2019, 17:17
yozuul,
подожду переводчика.

yozuul
12.11.2019, 18:22
подожду переводчика.
рони,
В двух папках лежит по 3 файла с одинаковыми именами. Мне нужно сравнить их содержимое (одинаковые они или нет). Сраваниваю по хешу.
class computeHash {
constructor(file) {
this.file = file
}
get files () {
let inputRead = fs.createReadStream(data.input + this.file);
let doneRead = fs.createReadStream(data.done + this.file);

let inputHash = crypto.createHash('sha1');
inputHash.setEncoding('hex');
inputRead.on('end', function() {
inputHash.end();
let inputHashTransfer = new CompareFilesByHash (inputHash.read() + ' *** ' + inputRead.path).hashMap
});

let doneHash = crypto.createHash('sha1');
doneHash.setEncoding('hex');
doneRead.on('end', function() {
doneHash.end();
let inputHashTransfer = new CompareFilesByHash (doneHash.read() + ' *** ' + inputRead.path).hashMap
});

doneRead.pipe(doneHash);
inputRead.pipe(inputHash);
return this;
}
};

class CompareFilesByHash {
constructor(inputHash) {
this.inputHash = inputHash
}
get hashMap () {
for (let key of [this.inputHash]) {
console.log(key)
}
return this;
}
};
console.log(key)
88872614ff7f474d3605fed661ccd9eea1cf70b7 *** C:\.work\data/input/file1
88872614ff7f474d3605fed661ccd9eea1cf70b7 *** C:\.work\data/input/file1
bc8d40d4173ca632deb8b4a696133a2d58d371a1 *** C:\.work\data/input/file2
88872614ff7f474d3605fed661ccd9eea1cf70b7 *** C:\.work\data/input/file2
aea0f24263e5c7b9680fa16deb7e886086ba0bf1 *** C:\.work\data/input/file3
88872614ff7f474d3605fed661ccd9eea1cf70b7 *** C:\.work\data/input/file3


Дальше застрял. Как их сравнить? первую строку со второй, третью с четвёртой, пятую с шестой

laimas
12.11.2019, 18:37
но никак не соображу, как их объединить попарно

Зачем, достаточно итерацию цикла увеличивать на 2, а ней сравнивать элементы текущей итерации и текущей плюс 1.

рони
12.11.2019, 18:50
yozuul,
ок, помочь не могу, не понимаю структуры данных и какой результат нужен.
предполагаю что-то типа
let files = ['a','a','b','c'], arr = [...new Set(files)];
console.log(arr)

yozuul
12.11.2019, 19:38
Спасибо всем, разобрался.