【问题标题】:Only show objects in array that contain a specific string仅显示数组中包含特定字符串的对象
【发布时间】:2016-10-11 13:02:28
【问题描述】:

我试图做一些你可以输入字符串的东西,而 js 只显示包含这个字符串的对象。例如,我键入 Address1,它会搜索每个地址的值,然后显示它(这里:它将是 Name1)。这是我的代码https://jsfiddle.net/76e40vqg/11/

HTML

<input>
<div id="output"></div>

JS

var data = [{"image":"http://www.w3schools.com/css/img_fjords.jpg","name":"Name1","address":"Address1","rate":"4.4"},
{"image":"http://shushi168.com/data/out/114/38247214-image.png","name":"Name2","address":"Address2","rate":"3.3"},
{"image":"http://www.menucool.com/slider/jsImgSlider/images/image-slider-2.jpg","name":"Name3","address":"Address3","rate":"3.3"}
];

var restoName = [], restoAddress = [], restoRate = [], restoImage= [];
for(i = 0; i < data.length; i++){    
        restoName.push(data[i].name);
        restoAddress.push(data[i].address);
        restoRate.push(data[i].rate);
        restoImage.push(data[i].image);
}

for(i = 0; i < restoName.length; i++){
document.getElementById('output').innerHTML += "Image : <a href='" + restoImage[i] + "'><div class='thumb' style='background-image:" + 'url("' + restoImage[i] + '");' + "'></div></a><br>" + "Name : " + restoName[i] + "<br>" + "Address : " + restoAddress[i] + "<br>" + "Rate : " + restoRate[i] + "<br>" + i + "<br><hr>";
  }

我确实尝试了很多东西,但没有任何效果,这就是我在这里问的原因......

【问题讨论】:

    标签: javascript html arrays object


    【解决方案1】:

    不要将详细信息存储为单独的数组。相反,使用类似于返回的数据对象的结构。

    for(i = 0; i < data.length; i++){ 
        if (data[i].address.indexOf(searchedAddress) !== -1) { // Get searchedAddress from user
            document.getElementById("output").innerHTML += data[i].name;
        }
    }
    

    在您的 JSFiddle 上进行编辑:https://jsfiddle.net/76e40vqg/17/

    干杯!

    【讨论】:

    • 你能编辑我的 jsfiddle 以便我看看它是如何工作的吗?发送
    • 当我输入一些东西时它不起作用,一切都消失了
    • 这工作大声笑。非常感谢您的帮助
    • 嗯。在 jsfiddle 上工作,但不在 ky 项目上
    • 我已经制作了 plunker 代码作为演示。您需要使用我在答案中提供的 sn-p。这是主要部分
    【解决方案2】:

    这是一个可行的解决方案:

    var data = [{"image":"http://www.w3schools.com/css/img_fjords.jpg","name":"Name1","address":"Address1","rate":"4.4"},
    {"image":"http://shushi168.com/data/out/114/38247214-image.png","name":"Name2","address":"Address2","rate":"3.3"},
    {"image":"http://www.menucool.com/slider/jsImgSlider/images/image-slider-2.jpg","name":"Name3","address":"Address3","rate":"3.3"}
    ];
    document.getElementById('search').onkeyup = search;
    var output = document.getElementById('output');
    
    
    function search(event) {
      var value = event.target.value;
      
      output.innerHTML = '';
      
      data.forEach(function(item) {
        var found = false;
        Object.keys(item).forEach(function(val) {
          if(item[val].indexOf(value) > -1) found = true;
        });
        
        if(found) {
          // ouput your data
          var div = document.createElement('div');
          div.innerHTML = item.name
          output.appendChild(div);
        }
      });
      
      return true;
    }
    <input type="search" id="search" />
    
    <div id="output"></div>

    【讨论】:

    • 谢谢。一个很好的解决方案,但@K3v1n 的解决方案更短。
    • 是的,但它只在地址字段中搜索,我的搜索是针对每个数据(地址、姓名等...)
    猜你喜欢
    • 2020-04-04
    • 2021-12-10
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2022-11-18
    • 2023-02-16
    相关资源
    最近更新 更多