如果满足条件,Javascript 推送到数组

标签 javascript arrays

我有以下食物对象:

var Foods = {
  "Fruits": [{
   "id": "1",
   "Name": "Granny Smith",
   "Category": "1"
  }, {
   "id": "2",
   "Name": "Raspberries",
   "Category": "1"
   }
],
 "Potatoes": [{
   "id": "3",
   "Name": "Maris Piper",
   "Category": "2"
  }, {
   "id": "4",
   "Name": "Charlotte",
   "Category": "2"
 }]
 }

我想做的只是推送与链接传递的 id 匹配的产品。

<a href="javascript:void(0)" class="cat" id="2" onClick="getCat(this.id)">Get Foods</a>

这是我迄今为止尝试过的:

function getCat (id){
 result = [];
 for(let item in Foods) {
    if(Foods[item].id == id) {
        data[item].foreach(v=>result.push("<div class='box'><h2>" + 
        data[key].Name + "<br></div>"));
    }
  }
}

display();

function display() {
  alert(result);
}

因此,如果用户点击链接(ID 为 2),结果数组应包含“Charlotte”和“Maris Piper”,但我只是画了一个空白。

感谢任何帮助。

干杯

最佳答案

你已经很接近了,但是有一个小问题:

for(let item in Foods) {
  console.log(Foods[item]);
  /*
  [{
  "id": "1",
  "Name": "Granny Smith",
 "Category": "1"
   }, {
   "id": "2",
   "Name": "Raspberries",
   "Category": "1"
   }
]
*/

因此,您正在迭代类别,即数组。

Foods[item].id

未定义,因为它是数组而不是产品。所以我们需要迭代数组,例如

var result=[];
Object.values(Foods).forEach(function(category){
 category.forEach(function(product){
   if(product.id===id){
     result.push(product);
   }
 });
});

Run

但如果您经常这样做,那么创建一个产品数组一次可能会更容易:

var products = Object.values(Foods).reduce((arr,cat)=>arr.concat(cat),[]);

因此,只要有人单击按钮,您就可以简单地过滤此内容:

var result = products.filter(product=>product.id === id);

Run

关于如果满足条件,Javascript 推送到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45346065/

相关文章:

javascript - 即使在事件发生后定义,事件处理程序也会执行

javascript - 如何将JSON数据推送到二维数组中?

javascript - 如何在每次页面重新加载时更改渐变背景,同时保持光标位置元素处于事件状态?

javascript - 从 Java Selenium 执行 JavaScript 库和函数

javascript - React-places-autocomplete 按下下面的其他组件

java - JAVA 字符串转字符数组

PHP:如何根据其中一个内部数组的值对包含内部数组的数组进行排序?

python - 优化二维数组中所有元素的舍入

javascript - Array.prototype.sort 默认比较函数如何实现?

javascript - 获取动态 Iframe 的内容