【问题标题】:Javascript: How to check for certain items in an arrayJavascript:如何检查数组中的某些项目
【发布时间】:2018-12-18 22:27:13
【问题描述】:

如何检查数组中的项目是否像:

var dayPartsArr = ['PT','WDM','WDD','EF','WKE'];

也是对象中的键,例如:

 var dayPartsMap = {
   'PT': 'PRIME TIME',
   'WDM': 'WEEKDAY MORNING',
   'WDD': 'WEEKDAY DAYTIME',
   'EF': 'EARLY FRINGE',
   'WKE': 'WEEKEND DAYTIME'
 };

请记住dayPartsArr 的顺序无关紧要。所以如果

var dayPartsArr = ['WKE','PT','WDM','WDD','EF'];

我仍然希望能够使用dayPartsMap 来检查dayPartsArr 中的每个项目是否是dayPartsMap 中的键

【问题讨论】:

  • 为什么不直接使用合适的地图?

标签: javascript jquery arrays javascript-objects


【解决方案1】:

忽略顺序

忽略顺序,我们可以将输入数组与键进行比较,如下所示:

var dayPartsArr = ['WDM','PT','WDD','EF','WKE']; //out of order

var dayPartsMap = {
  'PT': 'PRIME TIME',
  'WDM': 'WEEKDAY MORNING',
  'WDD': 'WEEKDAY DAYTIME',
  'EF': 'EARLY FRINGE',
  'WKE': 'WEEKEND DAYTIME'
};

dayPartsArr.every(item => ~Object.keys(dayPartsMap).indexOf(item)); // true

// Compare against an array with a missing key
dayPartsArr = ['WDM','PT','FAKE', 'WDD','EF','WKE'];

dayPartsArr.every(item => ~Object.keys(dayPartsMap).indexOf(item)); // false

注意~bitwise NOT operator,它对 indexOf 有帮助

上一个答案

您可以将 Object 的键转换为数组并比较该数组,如下所示:

有关 Object.keys 的更多信息,check MDN here.

var dayPartsArr = ['PT','WDM','WDD','EF','WKE'];

var dayPartsMap = {
  'PT': 'PRIME TIME',
  'WDM': 'WEEKDAY MORNING',
  'WDD': 'WEEKDAY DAYTIME',
  'EF': 'EARLY FRINGE',
  'WKE': 'WEEKEND DAYTIME'
};

// Create the comparison function...
function arraysIdentical(a, b) {
   var i = a.length;
   if (i != b.length) return false;
   while (i--) {
       if (a[i] !== b[i]) return false;
   }
       return true;
};

/// compare!
arraysIdentical(dayPartsArr, Object.keys(dayPartsMap)); // true

arraysIdentical最初由Tim Down建议

【讨论】:

  • 如果 dayPartsArr 中的项目顺序不同怎么办?这还能用吗?请参阅上面我修改后的问题
  • @NewToJS 请注意,如果 dayPartsArr 包含重复项,这也适用。
【解决方案2】:

我们可以使用everyfilter 来解决这个问题。

参考:

var dayPartsArr = ['PT','WDM','WDD','EF','WKE'];
var dayPartsMap = {
   'PT': 'PRIME TIME',
   'WDM': 'WEEKDAY MORNING',
   'WDD': 'WEEKDAY DAYTIME',
   'EF': 'EARLY FRINGE',
   'WKE': 'WEEKEND DAYTIME', 
};

// > 1 for WKE
// var dayPartsArr = ['PT','WDM','WDD','EF','WKE', 'WKE'];

const check = Object.keys(dayPartsMap).every(key =>   dayPartsArr.filter(day => day === key).length === 1);

console.log(check);

【讨论】:

    【解决方案3】:

    您可以使用Array.prototype.every 检查dayPartsArr 的所有项目是否存在于dayPartsMap 键中:

    var dayPartsArr = ['PT','WDM','WDD','EF','WKE'];
    
    var dayPartsMap = { 'PT': 'PRIME TIME', 'WDM': 'WEEKDAY MORNING', 'WDD': 'WEEKDAY DAYTIME', 'EF': 'EARLY FRINGE', 'WKE': 'WEEKEND DAYTIME' };
    
    var objKeys = Object.keys(dayPartsMap);
    var result = dayPartsArr.every(day => objKeys.includes(day));
    
    console.log(result);
    

    【讨论】:

      猜你喜欢
      • 2019-07-15
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 2011-08-29
      • 2020-08-10
      • 1970-01-01
      相关资源
      最近更新 更多