【问题标题】:React Native: Is there an easy way to update all object values if given value exists already?React Native:如果给定值已经存在,是否有一种简单的方法可以更新所有对象值?
【发布时间】:2020-05-04 22:59:33
【问题描述】:

我正在尝试使用 Flatlist/Sectionlist 等处理数据...但我想看看如果给定值已经存在,我该如何操作我的数据集?

假设用户在我的表单中传递了一个链接,并且该链接已经在数据集中,我希望能够更新其所有相关的属性值:

我曾经在 mongodb 等数据库系统方面做过一些工作,您可以在其中根据 id 进行更新,但由于这不是一个完整的数据系统,我不太确定要采取的路径.这可能很简单,我只是有脑雾......

const storedData = [
  {
    url: 'google.com'
    username: 'usernametag',
    content: 'this is some content that will go on forever and ever',
    thumbnail: 'https://url.jpg',
    avatar: 'https://url.jpg',
    media: 'https://url.mp4',
  },
  {
    url: 'sample.com'
    username: 'name',
    content: 'lost content goals lets start with some content forever and ever before we can start ending this hopefully it will last forever',
    thumbnail: 'https://url.jpg',
    avatar: 'https://url.jpg',
    media: 'https://url.mp4',
  },
  {
    url: 'thisisurl.com'
    username: 'another name',
    content: 'lost content goals lets start with some content forever and ever before we can start ending this hopefully it will last forever',
    thumbnail: 'https://url.jpg',
    avatar: 'https://url.jpg',
    media: 'https://url.mp4',
  },
];

如果用户提交了数据,而google.com 已经存在,我该如何获取特定的对象块并更新其中的所有内容?

我可以通过这样做来检查 google.com 是否存在:

if (!JSON.stringify(storedData).includes('google.com'))

然后我希望能够更新usernamecontentthumbnailavatarmedia

但我不太确定这是否是最好的方法?

【问题讨论】:

  • 在一天结束时,您必须遍历每个对象并检查其 url 类型,并在引擎盖后面执行相同的操作。所以我相信你做对了

标签: javascript arrays reactjs react-native javascript-objects


【解决方案1】:

你可以在 JS 中使用 find() 方法

const storedData = [
    {
      url: 'google.com',
      username: 'usernametag',
      content: 'this is some content that will go on forever and ever',
      thumbnail: 'https://url.jpg',
      avatar: 'https://url.jpg',
      media: 'https://url.mp4',
    },
    {
      url: 'sample.com',
      username: 'name',
      content: 'lost content goals lets start with some content forever and ever before we can start ending this hopefully it will last forever',
      thumbnail: 'https://url.jpg',
      avatar: 'https://url.jpg',
      media: 'https://url.mp4',
    },
    {
      url: 'thisisurl.com',
      username: 'another name',
      content: 'lost content goals lets start with some content forever and ever before we can start ending this hopefully it will last forever',
      thumbnail: 'https://url.jpg',
      avatar: 'https://url.jpg',
      media: 'https://url.mp4',
    },
  ];

let selectedObj = storedData.find(item => item.url == 'google.com')

selectedObj.username = 'hello'

console.log(storedData)

【讨论】:

    【解决方案2】:

    您可以使用map,并在回调函数中检查url,如果匹配则返回一个新对象。

    let newStoredData = storedData.map(urlObject => { 
        if (urlObject.url === "google.com") {
         return {/*new object*/}
        }
        else
         return urlObject
        }
      )
    

    【讨论】:

      猜你喜欢
      • 2018-08-21
      • 2010-12-29
      • 2014-01-22
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 2011-06-25
      • 2016-05-31
      • 1970-01-01
      相关资源
      最近更新 更多