在javascript中多次过滤
因此,我有一个名为products的对象,它有3个属性:在javascript中多次过滤,javascript,object,associative-array,Javascript,Object,Associative Array,因此,我有一个名为products的对象,它有3个属性: var products = [ {"name":"product1","size":"large","color":"blue","gender":"male"}, {"name":"product2","size":"small","color":"pink","gender":"female"}, {"name":"product3","size":"large","color":"green","gender":"ma
var products = [
{"name":"product1","size":"large","color":"blue","gender":"male"},
{"name":"product2","size":"small","color":"pink","gender":"female"},
{"name":"product3","size":"large","color":"green","gender":"male"},
{"name":"product4","size":"large","color":"yellow","gender":"female"},
{"name":"product5","size":"medium","color":"blue","gender":"female"},
{"name":"product6","size":"large","color":"green","gender":"male"},
{"name":"product7","size":"small","color":"yellow","gender":"male"},
{"name":"product8","size":"medium","color":"red","gender":"female"},
{"name":"product9","size":"large","color":"blue","gender":"male"},
{"name":"product10","size":"small","color":"red","gender":"female"}
];
因此,如果我有3个选择框用于大小、颜色和性别,我将如何筛选这3个框以获得产品名称
我正在尝试在javascript中使用.filter。我知道如何在非关联数组中使用它。但是,关联数组呢?如何使用它们?我写了一个JSFIDLE来支持这个答案。在这里查看:
var color = document.getElementById("color").value;
var gender = document.getElementById("gender").value;
var size = document.getElementById("size").value;
var matched = products.filter(function(e) {
return (e.color == color && e.gender == gender && e.size == size);
}).map(function(e) { return e.name; });
JQuery
$('input').change(function(){
var names = filter();
});
function filter(){
var selected = {
size: $('#size') .val(),
color: $('#color') .val(),
gender: $('#gender').val()
};
var matches = products.filter(function(product){
return product.size == selected.size &&
product.color == selected.color &&
product.gender == selected.gender;
});
return matches.map(function(product){ return product.name });
}
香草JS
var d = document;
var inputs = d.getElementsByTagName('input');
// Convert to array
inputs = Array.prototype.slice.call(inputs);
inputs.forEach(function(input){
input.addEventListener('change', function(e){
var names = filter();
});
});
function filter(){
var selected = {
size: d.getElementById('size') .value,
color: d.getElementById('color') .value,
gender: d.getElementById('gender').value
};
var matches = products.filter(function(product){
return product.size == selected.size &&
product.color == selected.color &&
product.gender == selected.gender;
});
return matches.map(function(product){ return product.name });
}
我写了一篇JSFIDLE来支持这个答案。在这里查看: JQuery
$('input').change(function(){
var names = filter();
});
function filter(){
var selected = {
size: $('#size') .val(),
color: $('#color') .val(),
gender: $('#gender').val()
};
var matches = products.filter(function(product){
return product.size == selected.size &&
product.color == selected.color &&
product.gender == selected.gender;
});
return matches.map(function(product){ return product.name });
}
香草JS
var d = document;
var inputs = d.getElementsByTagName('input');
// Convert to array
inputs = Array.prototype.slice.call(inputs);
inputs.forEach(function(input){
input.addEventListener('change', function(e){
var names = filter();
});
});
function filter(){
var selected = {
size: d.getElementById('size') .value,
color: d.getElementById('color') .value,
gender: d.getElementById('gender').value
};
var matches = products.filter(function(product){
return product.size == selected.size &&
product.color == selected.color &&
product.gender == selected.gender;
});
return matches.map(function(product){ return product.name });
}
没有Barmar的代码那么优雅,我实现了3个Dropbox中的2个,也为您留下了一些工作;)
var乘积=[
{“name”:“product1”,“size”:“large”,“color”:“blue”,“gender”:“male”},
{“名称”:“产品2”,“尺寸”:“小”,“颜色”:“粉红”,“性别”:“女性”},
{“名称”:“产品3”,“尺寸”:“大”,“颜色”:“绿色”,“性别”:“男性”},
{“名称”:“产品4”,“尺寸”:“大”,“颜色”:“黄色”,“性别”:“女性”},
{“名称”:“产品5”,“尺寸”:“中等”,“颜色”:“蓝色”,“性别”:“女性”},
{“名称”:“产品6”,“尺寸”:“大”,“颜色”:“绿色”,“性别”:“男性”},
{“name”:“product7”,“size”:“small”,“color”:“yellow”,“gender”:“male”},
{“名称”:“产品8”,“尺寸”:“中等”,“颜色”:“红色”,“性别”:“女性”},
{“name”:“product9”,“size”:“large”,“color”:“blue”,“gender”:“male”},
{“名称”:“产品10”,“尺寸”:“小”,“颜色”:“红”,“性别”:“女”}
];
函数checkValidOption(){
var color_selected=document.getElementById(“颜色”).value;
var size_selected=document.getElementById(“size”).value;
var结果=”;
//只有选择了这两个选项
如果(选择了颜色!=“空”和大小!=“空”){
对于(var i=0;i
没有Barmar的代码那么优雅,我实现了3个Dropbox中的2个,也为您留下了一些工作;)
var乘积=[
{“name”:“product1”,“size”:“large”,“color”:“blue”,“gender”:“male”},
{“名称”:“产品2”,“尺寸”:“小”,“颜色”:“粉红”,“性别”:“女性”},
{“名称”:“产品3”,“尺寸”:“大”,“颜色”:“绿色”,“性别”:“男性”},
{“名称”:“产品4”,“尺寸”:“大”,“颜色”:“黄色”,“性别”:“女性”},
{“名称”:“产品5”,“尺寸”:“中等”,“颜色”:“蓝色”,“性别”:“女性”},
{“名称”:“产品6”,“尺寸”:“大”,“颜色”:“绿色”,“性别”:“男性”},
{“name”:“product7”,“size”:“small”,“color”:“yellow”,“gender”:“male”},
{“名称”:“产品8”,“尺寸”:“中等”,“颜色”:“红色”,“性别”:“女性”},
{“name”:“product9”,“size”:“large”,“color”:“blue”,“gender”:“male”},
{“名称”:“产品10”,“尺寸”:“小”,“颜色”:“红”,“性别”:“女”}
];
函数checkValidOption(){
var color_selected=document.getElementById(“颜色”).value;
var size_selected=document.getElementById(“size”).value;
var结果=”;
//只有选择了这两个选项
如果(选择了颜色!=“空”和大小!=“空”){
对于(var i=0;i
这不是一个关联数组。它是一个对象数组,name
是对象的属性之一。这也是一个非关联数组,即使JSYes中没有关联数组,但您可以使用products[0]['size']调用它们,这会给您带来“大”。您可以使用products[0].name
这将为您提供product1
是的,您是对的。这是一个对象数组。但是,由于您可以按产品[0]['size']调用它,因此产品[0]成为关联数组。这不是关联数组。它是一个对象数组,name
是对象的属性之一。这也是一个非关联数组,即使JSYes中没有关联数组,但您可以使用products[0]['size']调用它们,这会给您带来“大”。您可以使用products[0].name
这会给你product1
是的,你是对的。这是一个对象数组。但是,因为你可以通过产品[0]['size']来调用它,所以产品[0]变成了一个关联数组。答案很好-只是他要求的是JS而不是jQuery:)谢谢,翻译成普通的JS。这很简单也很棒!回答很好-只是他要求的是JS而不是jQuery:)谢谢,翻译成普通的JS。这很简单也很棒!谢谢,这也会有帮助!谢谢,这也会有帮助!