检查是否不变.JS地图值包含char



我想知道是否有一种简单的方法来检查不变的地图值是否包含某个字符。

基本上在寻找https://facebook.github.io/immutable-js/docs/#/map/includes,但这仅与该值上的整个单词匹配。

现在我迭代每个属性并检查值本身。

function mapContains(map, char) {
  let contains = false;
  map.forEach((val) => {
    if(val.includes(char)) {
      contains = true;
      return false; //short circuits the foreach
    }
  });
  return contains;
}

感谢提前的回复。

我建议对此使用Map.prototype.some。它将在您的lambda返回真实价值后立即短路并返回true - 否则返回false

const { Map } = require('immutable')
const m = Map({a: 'one', b: 'two', c: 'three'})
m.some(v => /t/.test(v)) // true, at least one value has a 't'
m.some(v => /x/.text(v)) // false, no values contain an 'x'
// but be careful with automatic string coercion
/o/.test({}) // true, because String({}), '[object Object]', contains 'o'

如果您的地图将保存多个值类型,您将需要谨慎使用String.prototype方法 - 即,我建议不要这样的事情

const { Map } = require('immutable')
// mixed value type Map
const m = Map({a: 'one', b: 2, c: 3})
// CAUTION!
// reckless assumption that every value is a string (or has a .includes method)
m.some(v => v.includes('o')) // true, short-circuits on first value
m.some(v => v.includes('x')) // TypeError: v.includes is not a function

如果您必须使用String.prototype.includes,我建议您进行type检查

const { Map } = require('immutable')
const m = Map({a: 'one', b: 2, c: 3})
m.some(v => typeof v === 'string' && v.includes('o')) // true
m.some(v => typeof v === 'string' && v.includes('x')) // fase

最新更新