首页 > 解决方案 > 如何检查数组中是否有相等的值

问题描述

我有一系列产品,我会循环并将它们显示在一个项目上。但是,同一产品可能会在同一天被多次选择,因此我希望正确显示数量,但我不知道该怎么做。

所以我的数组看起来像这样:

[
  {product_id: "679", quantity: "1", chosen_date: "2018-10-01"}
  {product_id: "675", quantity: "1", chosen_date: "2018-10-02"}
  {product_id: "675", quantity: "1", chosen_date: "2018-10-02"}
  {product_id: "675", quantity: "1", chosen_date: "2018-10-03"}
]

这是我的循环,显示每个项目

let elementWrapper = document.querySelectorAll('.items') 
for (var i = 0; i < items.length; i++){
    let elem = elementWrapper[i];
    let chosen_date = items[i].chosen_date;
    let product_id = items[i].product_id;
    let quantity = items[i].quantity;
    let span = document.createElement('span');
    span.innerHTML = moment(chosen_date).locale('da').format('Do MMM');
    elementWrapper[i].append(span);
}

其中“项目”是数组。

如上所述,我希望 ID 为“675”的产品被选择两次“2018-10-02”只显示一次,数量 = 2

我怎样才能做到这一点?

标签: javascriptjqueryarraysjson

解决方案


var items = [
  {product_id: "679", quantity: 1, chosen_date: "2018-10-01",another:'a'},
  {product_id: "675", quantity: 1, chosen_date: "2018-10-02",another:'b'},
  {product_id: "675", quantity: 1, chosen_date: "2018-10-02",another:'a'},
  {product_id: "675", quantity: 1, chosen_date: "2018-10-03",another:'c'}
];

var incrementField = 'quantity';
var exceptFields = ['another'];
/**
* @param items [array] items as a multidimensional array
* @param incrementField [string]
* @param exceptFields [array]
**/
function plusArrays(items,incrementField,exceptFields=[]){
  // array with a filtered keys and values to help searching
  unique_arrays = [];
  // Original arrays
  unique_arrays_without_except = [];
  items.forEach(function(item){
    // Cloning the item
    original_item = JSON.parse(JSON.stringify(item));
    // Deleting the excep fields
    exceptFields.forEach(function(except){
      delete item[except];
    })
    // Getting the increment value before delting it
    var incrementValue = item[incrementField];
    // unsetting the incrementValue property
    delete item[incrementField];
    // Adding the increment value
    if(unique_arrays.indexOf(JSON.stringify(item))+1>0) {
  unique_arrays_without_except[unique_arrays.indexOf(JSON.stringify(item))][incrementField]+=incrementValue;
    } else {
      // Pushing the original item to original items list
      unique_arrays_without_except.push(original_item);
      // Pushing the filtered items to list
      unique_arrays.push(JSON.stringify(item));
    }
  });
  
  return unique_arrays_without_except;
}

console.log(plusArrays(items,incrementField,exceptFields))

这是一个功能来完成你的工作。干杯!


推荐阅读