【问题标题】:How to add a new key:value pair to an already existing array state variable react native如何将新的键:值对添加到已经存在的数组状态变量反应原生
【发布时间】:2019-09-25 18:25:51
【问题描述】:

我有一个数据库函数,它从 sqlite 数据库返回一些行,然后将其存储在状态中

rows = await ReturnSelectedSymbolsDB()
this.setState({ symbols: rows })

数组看起来像这样

symbols: [{key: "0", symbol:"name1", active: false},{key:"1", symbol:"name2",active: false}]

我有另一个数据库函数,它返回一些行,我希望将它们添加到symbol,所以它看起来像这样。

symbols: [{key: "0", symbol:"name1", active: false, newKey: newValue},{key:"1", symbol:"name2",active: false, newKey, newValue2}]

第二个函数将从数据库中返回多行,这些行很容易与symbols 匹配,因为symbol:symbol 将匹配otherFunction:symbol。

通常你会像一个普通的 SQL 查询一样编写这个,内部连接将 2 个表连接在一起,然后将结果行放在一个状态变量中,但在这种情况下我不能,必须逐个构建状态变量。

用普通的javascript可以做到吗?

编辑: 可能不清楚,但newKey 可以有不同的值,具体取决于symbol 的名称是什么

【问题讨论】:

    标签: javascript sqlite react-native expo


    【解决方案1】:

    您可以创建一个新的 util 函数,您可以在其中向数组内的所有对象添加新键。

    addKey(symbol) {
       let newArray=[...symbol];
       return newArray.map((ele, i) => {
          return {...ele, newKey: newValue};
       })
    }
    

    快乐编码:)

    【讨论】:

    • 我确实想为数组中的所有对象添加一个新键,但与新键相关的每个值都会有所不同。你的代码会这样做吗?
    • 是的,它会起作用的。只需发送映射函数并将具有新值的新键传递给您想要拥有新键值对的对象。
    【解决方案2】:

    您必须将新值插入到您的第一个函数数组中,有几种方法可以使用 for 循环 或数组操作 函数在数组中插入对象。

    var arrOfObj = [{
      key: "0", 
      symbol:"name1", 
      active: false
    }, {
      key: "1", 
      symbol:"name1", 
      active: false
    }, {
      key: "2", 
      symbol:"name1", 
      active: false
    }];
    
    var result = arrOfObj.map(function(o) {
      o.newKey = newValue;
      return o;
    })
    
    console.log(result)
    

    注意:我更喜欢使用带有两个表的内连接来返回 合并不需要任何数组操作的数组。

    【讨论】:

      【解决方案3】:

      如果你知道给定符号对应的键值,你可以这样做:

      for (let i = 0; i < symbols.length; i++){
          symbols[i].newKey = "anyValue"
      }
      

      【讨论】:

        【解决方案4】:

        试试这个,

        let symbols = [
          { key: "0", symbol: "name1", active: false },
          { key: "1", symbol: "name2", active: false }
        ];
        let newSymbols = [
          { key: "1", symbol: "name1", newKey: "fdds" },
          { key: "0", symbol: "name2", newKey: "sadav" }
        ];
        
        mergeArray = (arrayOld, arrayNew) => {
          let output = arrayOld.filter(item => {
            let find = findMatchingItem(arrayNew, item.key);
            item["newKey"] = find.newKey;
            return item;
          });
          return output;
        };
        
        findMatchingItem = (array, matchingItemKey) => {
          let output = null;
          array.map(item => {
            if (item.key == matchingItemKey) {
              output = item;
            }
          });
          return output;
        };
        
        let newArray = mergeArray(symbols, newSymbols);
        console.log(newArray);

        我已经使用 "key" 匹配对象,如果你想从 "symbol" 更改 "key""symbol"

        【讨论】:

          猜你喜欢
          • 2020-12-08
          • 2018-11-09
          • 2020-12-10
          • 2020-12-08
          • 2019-06-16
          • 2017-05-27
          • 1970-01-01
          • 1970-01-01
          • 2021-04-15
          相关资源
          最近更新 更多