在javascript中多次过滤

在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

因此,我有一个名为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":"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。这很简单也很棒!谢谢,这也会有帮助!谢谢,这也会有帮助!