#javascript #radio-button #filtering #product
#javascript #переключатель #фильтрация #продукт
Вопрос:
У меня есть длинный список продуктов data.json, которые я выбрал в js. Мне нужно создать переключатели, которые фильтруют показанные продукты, и я не уверен, как это сделать! Я выбрал данные, которые мне нужно отфильтровать, и сохранил их, я разделяю массивы, вот так: (это автомобили и транспортные средства)
getData().then(data => {
// Brands array
const brands = Object.values(data).map(({brand}) => brand);
console.log(brands);
// Model year
const modelYears = Object.values(data).map(({model_year}) => model_year);
console.log(modelYears);
// Other datas...
Проблема в том, что у меня есть несколько автомобилей одного и того же года выпуска или одной и той же марки, мне нужно написать функцию, которая просматривает отмеченный переключатель кнопок и показывает все автомобили этой марки / этого года выпуска…
<form id="brands">
<p>MERKER:</p>
<input type="radio" id="challenger" name="brand" value="challenger">
<label for="challenger">Challenger</label><br>
<input type="radio" id="euromobil" name="brand" value="euromobil">
<label for="euromobil">Eura Mobil</label><br>
<input type="radio" id="dethleffs" name="brand" value="dethleffs">
<label for="dethleffs">Dethleffs</label><br>
Любой вклад или идея будут высоко оценены!
Комментарии:
1. Вы можете использовать array.prototype.filter()
Ответ №1:
Посмотрите на это:
<!DOCTYPE html>
<html>
<body>
<form id="brands">
<p>MERKER:</p>
<input type="radio" id="honda" name="brand" value="honda">
<label for="honda">Honda</label><br>
<input type="radio" id="toyota" name="brand" value="toyota">
<label for="toyota">Toyota</label><br>
<input type="radio" id="fiat" name="brand" value="fiat">
<label for="fiat">Fiat</label><br>
</form>
<div id="results"></div>
<script>
var readTextFile = function(file, callback) {
return new Promise( function (resolve, reject) {
var rawFile = new XMLHttpRequest();
rawFile.overrideMimeType("application/json");
rawFile.open("GET", file, true);
rawFile.onreadystatechange = function() {
if (rawFile.readyState === 4 amp;amp; rawFile.status == "200") {
resolve (callback(rawFile.responseText));
}
}
rawFile.send(null);
});
}
var brands = document.forms["brands"].elements["brand"];
var resultsDiv = document.getElementById('results');
// Add event listener to each radio button
function bind (data) {
//console.log(data);
for (let brand of brands){
brand.addEventListener("click", function (){
var resultsDiv = document.getElementById("results");
resultsDiv.innerText ='';
for (let item in data)
{
// console.log( data[item].brand);
if (brand.getAttribute('id') === data[item].brand)
{
console.log(data[item].model_year);
resultsDiv.innerText = `brand : ${data[item].brand}
model_year: ${data[item].model_year}
price: ${data[item].price}n`;
}
}
});
}
};
readTextFile("./cars.json", function(text){
var data = JSON.parse(text);
return data;
// return self.data;
}).then(result => bind(result));
</script>
</body>
</html>
Связанный образец json в cars.json:
{
"car1" : {"brand" : "fiat", "model_year": 2010, "price" : 33000 },
"car2" : {"brand" : "honda", "model_year": 2015, "price" : 120000 },
"car3" : {"brand" : "toyota", "model_year": 2012, "price" : 200000 },
"car4" : {"brand" : "fiat", "model_year": 2010, "price" : 33000 },
"car5" : {"brand" : "honda", "model_year": 2015, "price" : 120000 }
}