簡體   English   中英

檢查數組的第一個字母並設置對象的屬性(如果存在)

[英]Check first letter of array and set property on an object if exists

我有一系列的站點租戶,這看起來像

['foo','bar','boo','baz']

我還有一個控制過濾器狀態的對象。

此過濾器用於控制可見的租戶,這看起來像

[
  { text: 'ALL', disbaled: false },
  { text: 'A', disbaled: true },
  { text: 'B', disbaled: true },
  { text: 'C', disbaled: true },
  { text: 'D', disbaled: true },
  { text: 'E', disbaled: true },
  { text: 'F', disbaled: true },
  { text: 'G', disbaled: true },
  { text: 'H', disbaled: true },
  { text: 'I', disbaled: true },
  { text: 'J', disbaled: true },
  { text: 'K', disbaled: true },
  { text: 'L', disbaled: true },
  { text: 'M', disbaled: true },
  { text: 'N', disbaled: true },
  { text: 'O', disbaled: true },
  { text: 'P', disbaled: true },
  { text: 'Q', disbaled: true },
  { text: 'R', disbaled: true },
  { text: 'S', disbaled: true },
  { text: 'T', disbaled: true },
  { text: 'U', disbaled: true },
  { text: 'V', disbaled: true },
  { text: 'W', disbaled: true },
  { text: 'X', disbaled: true },
  { text: 'Y', disbaled: true },
  { text: 'Z', disbaled: true },
];

我想做的是遍歷此租戶列表,並為找到的每個字符串在我的字母對象中將相應的起始字母的disabled標志設置為false

我在其他地方有一個過濾器,可以讓我控制要分配的房客,就像這樣...

const byFirstLetter = letter => {
  if (letter === 'ALL') return () => true;

  const rgx = new RegExp(`^${letter}`);
  return tenant => rgx.test(tenant);
};

tenants.filter(byFirstLetter(selector)).map(column => (
  <div className="column is-half">
    <ul>{column.map(client => <li key={client}>{client}</li>)}</ul>
  </div>
))}

我正在努力研究如何做到這一點,當時我正在考慮進行循環,創建一個新對象,然后使用object.assign替換更新的值,但是不確定這是否正確並且無法使其正常工作。

您的問題中存在一些歧義(尤其是在All周圍),但是我認為這是您的正確方向。

const tenants = ['foo','bar','boo','baz'];

let letters = [
  { text: 'ALL', disabled: false },
  { text: 'A', disabled: true },
  { text: 'B', disabled: true },
  { text: 'C', disabled: true },
  { text: 'D', disabled: true },
  { text: 'E', disabled: true },
  { text: 'F', disabled: true },
  { text: 'G', disabled: true },
  { text: 'H', disabled: true },
  { text: 'I', disabled: true },
  { text: 'J', disabled: true },
  { text: 'K', disabled: true },
  { text: 'L', disabled: true },
  { text: 'M', disabled: true },
  { text: 'N', disabled: true },
  { text: 'O', disabled: true },
  { text: 'P', disabled: true },
  { text: 'Q', disabled: true },
  { text: 'R', disabled: true },
  { text: 'S', disabled: true },
  { text: 'T', disabled: true },
  { text: 'U', disabled: true },
  { text: 'V', disabled: true },
  { text: 'W', disabled: true },
  { text: 'X', disabled: true },
  { text: 'Y', disabled: true },
  { text: 'Z', disabled: true },
];

const disableLetters = (all) => {
  if (all) {
    // ... I'm not sure what your intentions for the "All" index is supposed to be
    // but handle it here.
    return;
  }

  tenants.forEach(tenant => {
    const firstLetter = tenant.length ? tentant[0] : '';

    letters = letters.map(letter => {
      letter.disabled = letter.text.toLowerCase() !== firstLetter.toLowerCase();

      return letter;
    });
  });
}

// Usage:

disableLetters();

也許這就是您想要做的。

給定一個名稱數組:

var tenant = ['ambr','raul','marcio','gustavo','sandra']

letter_arr數組中的disabled屬性設置為false,其中text等於名稱的起始字符。

可以使用以下功能完成此操作:

 tenant.map(a=>letter_arr.filter(b=>b.text.toLowerCase()==a[0].toLowerCase()).map(b=>b.disabled=false))

說明

tenant是您的姓名數組

map用於遍歷tenant數組

然后,我們通過租戶的第一個字符過濾letter_arr

然后,對於每個結果,我們再次進行map ,並將disabled屬性設置為false。

 var letter_arr = [ { text: 'ALL', disbaled: false }, { text: 'A', disbaled: true }, { text: 'B', disbaled: true }, { text: 'C', disbaled: true }, { text: 'D', disbaled: true }, { text: 'E', disbaled: true }, { text: 'F', disbaled: true }, { text: 'G', disbaled: true }, { text: 'H', disbaled: true }, { text: 'I', disbaled: true }, { text: 'J', disbaled: true }, { text: 'K', disbaled: true }, { text: 'L', disbaled: true }, { text: 'M', disbaled: true }, { text: 'N', disbaled: true }, { text: 'O', disbaled: true }, { text: 'P', disbaled: true }, { text: 'Q', disbaled: true }, { text: 'R', disbaled: true }, { text: 'S', disbaled: true }, { text: 'T', disbaled: true }, { text: 'U', disbaled: true }, { text: 'V', disbaled: true }, { text: 'W', disbaled: true }, { text: 'X', disbaled: true }, { text: 'Y', disbaled: true }, { text: 'Z', disbaled: true }, ]; var tenant = ['ambr','raul','marcio','gustavo','sandra'] tenant.map(a=>letter_arr.filter(b=>b.text.toLowerCase()==a[0].toLowerCase()).map(b=>b.disbaled=false)) console.log(letter_arr) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM