javascript - 在Javascript中按值从数组中获取元素

标签 javascript json

我有简单的代码,可以让我根据标签显示相关产品,但我想扩展该代码,这样我可以输入多个标签。此时我只能运行:

<script type="text/javascript">category('tag1');</script>

我得到了所有标签中带有“tag1”的产品。在本例中 name1name2

var products = [
  {
    name: 'name1',
    tags: ['tag1', 'tag2', 'tag3'],
  },
  {
    name: 'name2',
    tags: ['tag1', 'tag3', 'tag4', 'tag5'],
  },
  {
    name: 'name3',
    tags: ['tag2', 'tag5', 'tag6'],
  }

];

var finalHtml = "";

function category(tag) {
  return products.filter(function(product){
    if (~product.tags.indexOf(tag)) {
      finalHtml += '<li>' + product.name + '</li>';
      document.getElementById("related_prod").innerHTML = finalHtml;
    }
  });
}

我期望什么?

当我运行该代码时:

<script type="text/javascript">category('tag1, tag6');</script>

我希望看到标签中包含 tag1tag2 的每个产品。在本例中,它应该是 name1name3

最佳答案

这是使用 ECMAScript2015 的解决方案:

var products = [
  {
    name: 'name1',
    tags: ['tag1', 'tag2', 'tag3'],
  },
  {
    name: 'name2',
    tags: ['tag1', 'tag3', 'tag4', 'tag5'],
  },
  {
    name: 'name3',
    tags: ['tag2', 'tag5', 'tag6'],
  }
];

function category(...tags) {
    let related = document.getElementById("related_prod");
    // clear output
    related.innerHTML = '';
    // turn array values into object properties for faster lookup
    tags = tags.reduce((tags, tag) => (tags[tag] = 1, tags), {});
    // find products that have at least one of the tags 
    products.filter(product => product.tags.some(tag => tags[tag]))
            // display the names of the found products 
            .forEach(product => {
                let li = document.createElement('li');
                li.textContent = product.name;
                related.appendChild(li);
            });
}

category('tag4','tag5');
<ul id="related_prod"></ul>

关于javascript - 在Javascript中按值从数组中获取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38211119/

相关文章:

php - 如果我的网站被盗,通知我的代码

Javascript 如何在 Web App 中隐藏 Consumer Key 和 Secret?

javascript - 如何在 Javascript onload 中捕获表单提交?

javascript - 我的 mousedown 函数不是从最近的点画线,而是从左上角画线

python - Django rest framework,设置api响应Content-Encoding为gzip

javascript - 使用键模式读取 JSON 对象值

javascript - 如何在ajax回调上选择 radio 输入

json - 如何在 REST 中处理 @OneToMany 关系

javascript - 如何将 UL 列表项转换为 JSON 对象?

javascript - 如何在 JavaScript 中显示评论线程层次结构?