首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数组中过滤值

从数组中过滤值
EN

Stack Overflow用户
提问于 2020-12-01 16:18:28
回答 2查看 43关注 0票数 0

我在做一个可以安排员工时间的项目。这些数据都在谷歌单子上,每个员工都会被指定为工作场所。有几种可能性:数字,罗马数字,字符,加法,.

问题是如何处理罗马数字。一整天都在排列,一个员工有一个项目。我的想法是分离包含“I”或“V”(数字从I到VII)的项目。接下来,我想过滤掉一些包含这些字母,但不合适的项目。因此,创建了一个包含待排除项的数组(这些条目是固定的)。

代码的一部分:(在实际中,数据是从工作表中输入的。这里只是一个示例数组)

代码语言:javascript
复制
var monTr = ['u/1', 'I/4', 'G1', 'G23', 'LD', 'E1', 'E2 /3', 'LL', 'VAR', 'III', 'VUV', 'V - 11', 'II', 'PB', 'V', '-', 'IV'];
var toExcl = ['VAR', 'VUV', 'EIT'];

var b = monTr
  .map(function (inp, index) { if (inp.indexOf('I') !== -1 || inp.indexOf('V') !== -1) { return index } })
  .filter(index => index != null);
Logger.log(b);

var c = monTr
  .map(function (inp, index) { if (inp.indexOf('I') !== -1 || inp.indexOf('V') !== -1 && toExcl.forEach(function (item) { inp.indexOf(item) !== -1 })) { return index } })
  .filter(index => index != null);
Logger.log(c); 

第一部分如预期一样工作;b包含I或V的所有ID,但第二部分不能正常工作;c不包含ID 11 (‘V-11’)和14 ('V')。我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-01 16:59:38

使用indexOf()

  • You而不是
  1. 可以稍微清理事物,不能从forEach()返回,但也可以使用includes() on toExcl来完成所需的任务。

代码语言:javascript
复制
const monTr=['u/1','I/4', 'G1','G23', 'LD', 'E1', 'E2 /3', 'LL', 'VAR', 'III', 'VUV', 'V - 11', 'II', 'PB', 'V', '-', 'IV'];
const toExcl=['VAR', 'VUV', 'EIT'];

const b = monTr.map(function(inp, index) {
  if (inp.includes('I') || inp.includes('V')) {
    return index;
  } 
}).filter(index => index != null); 
console.log(b);

const c = monTr.map(function(inp, index) {
  if (inp.includes('I') || inp.includes('V') && !toExcl.includes(inp)) {
    return index
  }
}).filter(index => index != null); 
console.log(c);

票数 2
EN

Stack Overflow用户

发布于 2020-12-02 11:08:32

我不确定这是否有帮助,但我想我应该添加一个使用reduce的示例:

代码语言:javascript
复制
const monTr=['u/1','I/4', 'G1','G23', 'LD', 'E1', 'E2 /3', 'LL', 'VAR', 'III', 'VUV', 'V - 11', 'II', 'PB', 'V', '-', 'IV'];
const toExcl=['VAR', 'VUV', 'EIT'];

const filter_indexes = (filter, array) =>
  array.reduce(
    (acc, value, index) => acc.concat(filter(value) ? index : []),
    []
  );

const criteria_b = (value) => ['I', 'V'].some(letter => value.includes(letter));
const criteria_c = (value) => criteria_b(value) && !toExcl.includes(value);

const b = filter_indexes(criteria_b, monTr);
const c = filter_indexes(criteria_c, monTr);

console.log('b: ', b);
console.log('c: ', c);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65094333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档