arr = Array.from(new Set(arr));
Но работает только с примитивами (строки, числа, bool) т.к. объекты сравниваются по ссылке, на выходе будет новый массивfunction dedupe(arr) {
const values = new Set();
const len = arr.length;
let offset = 0;
for(let i = 0; i < len; i++) {
let val = arr[i];
if(values.has(val)) {
offset++;
} else {
values.add(val);
arr[i - offset] = val;
}
}
arr.length = len - offset;
}
//Ваша функция запроса, я же просто посчитаю рандомы для примера
//Значение аргумента по умолчанию подставил для 1-ого случая, у Вас же может быть проверка
function someAsync(cur = 1){
return Promise.resolve(cur * Math.random());
}
//Функция раннер, которая будет асинхронно-рекурсивно перевызываться
function run(next){
return someAsync(next).then(result => {
if(result < 0.1) { //Некое условие, что последний результат получен
return result;
}
return run(result); //Перезапуск
});
}
run().then(result => console.log('Последний результат:', result));
async function saveData(data) {
for(let id of Object.keys(data)) {
await appendFile(fileName, id);
await appendFile(fileName, data[id]);
}
}
saveData({cat:1,dog:2})
let data = {cat:1,dog:2};
Object.keys(data).reduce(
(p, id) => p
.then(() => appendFile(fileName, id))
.then(() => appendFile(fileName, data[id])),
Promise.resolve()
);
$('#marka option').each(function () {
var $this = $(this);
if (location.href.indexOf($this.val()) === -1) {
// не содержит
} else {
$this.prop('selected', true);
}
});
Array.prototype.forEach.call(document.getElementById('marka').options, function(opt) {
if (location.href.indexOf(opt.value) === -1) {
// не содержит
} else {
opt.selected = true;
}
});