【问题标题】:Change boolean in the filtered array更改过滤数组中的布尔值
【发布时间】:2018-11-12 18:38:53
【问题描述】:

我有一个数组,我需要编写一个接受用户名的函数,并且布尔值应该更改为 true。

var array = [{
  user: "Sasha",
  message: "Hello guys",
  time: "20:28:2",
  read: false
}, {
  user: "Sasha",
  message: "How are you doing",
  time: "20:28:2",
  read: false
}, {
  user: "Dima",
  message: "I am fine, thanks!",
  time: "20:28:2",
  read: false
}, {
  user: "Katya",
  message: "I am doing well! What about you?",
  time: "20:28:2",
  read: false
}]

function readMessage(user) {
  let test = array
  let filtered = test.filter(item => item.user === user);
  let y = filtered.map(item => item.user && !item.read);
  console.log(y);
}

readMessage();

我认为我应该过滤数组,然后将 bool 改为相反,但之后 map 函数只返回 bool。如何更改布尔值并将更改推送到原始数组?

【问题讨论】:

标签: javascript


【解决方案1】:

首先你需要用你想要的值过滤数组,然后你得到一个过滤后的数组,现在你映射这个数组来更新布尔值。

// put your messages array in a variable
var array = [{
  user: "Sasha",
  message: "Hello guys",
  time: "20:28:2",
  read: false
}, {
  user: "Sasha",
  message: "How are you doing",
  time: "20:28:2",
  read: false
}, {
  user: "Dima",
  message: "I am fine, thanks!",
  time: "20:28:2",
  read: false
}, {
  user: "Katya",
  message: "I am doing well! What about you?",
  time: "20:28:2",
  read: false
}]

function readMessage(user) {
  let test = array
  let filtered = test.filter(item => item.user === user);
  // console.log(filtered); // check the filtered array;
  filtered.map(item => item.read = true);
  console.log(filtered);
}
// call the function now;
readMessage('Sasha');

【讨论】:

    【解决方案2】:

    这行代码有效但只是返回您过滤/映射的值

    array.filter(item => item.user === 'Sasha').map(item => item.read = true)
    

    在你的函数中返回数组

    array.filter(item => item.user === user).map(item => item.read = true)
    return array;
    

    【讨论】:

      【解决方案3】:

      您可以像这样在 map 函数中将 read 设置为 true:

      function readMessage(user){
         let test = array
         let filtered = test.filter(item => item.user === user);
         let y = filtered.map(item => item.read = true);
      }
      

      []的

      【讨论】:

        【解决方案4】:

        此版本不会就地修改您的消息,而只会返回过滤后的更新列表:

        const items = [
          {user: "Sasha", message: "Hello guys", time: "20:28:2", read: false},
          {user: "Sasha", message: "How are you doing", time: "20:28:2", read: false},
          {user: "Dima", message: "I am fine, thanks!", time: "20:28:2", read: false},
          {user: "Katya", message: "I am doing well! What about you?", time: "20:28:2", read: false}
        ] 
        
        const readMessages = (items, user) => items
          .filter(item => item.user === user)
          .map(({read, ...rest}) => ({...rest, read: !read}))
        
        const updatedItems = readMessages(items, 'Sasha')
        
        console.log(updatedItems)

        此版本返回一个新的完整消息列表,匹配的消息已更改:

        const items = [
          {user: "Sasha", message: "Hello guys", time: "20:28:2", read: false},
          {user: "Sasha", message: "How are you doing", time: "20:28:2", read: false},
          {user: "Dima", message: "I am fine, thanks!", time: "20:28:2", read: false},
          {user: "Katya", message: "I am doing well! What about you?", time: "20:28:2", read: false}
        ] 
        
        const updatedMessages = (items, userToCheck) => items
          .map(({user, read, ...rest}) => user == userToCheck
              ? {...rest, user, read: !read}
              : {...rest, user, read}
          )
        
        const updatedItems = updatedMessages(items, 'Sasha')
        
        console.log(updatedItems)

        而且这个版本更新了项目列表。 (除非绝对必要,否则我建议不要这样做。不可变数据有很大的好处!)

        const updateMessages = (items, userToCheck) => {
          items.forEach(item => {
            if (item.user == userToCheck) {
              item.read = !item.read
            }
          })
          return items
        }
        

        【讨论】:

          猜你喜欢
          • 2023-01-20
          • 2020-05-14
          • 2023-03-22
          • 1970-01-01
          • 2022-10-25
          • 2014-01-06
          • 2017-06-25
          • 1970-01-01
          • 2019-04-30
          相关资源
          最近更新 更多