如何将新的键:值对添加到已经存在的数组状态变量反应原生

Posted

技术标签:

【中文标题】如何将新的键:值对添加到已经存在的数组状态变量反应原生【英文标题】: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 的名称是什么

【问题讨论】:

【参考方案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"

【讨论】:

以上是关于如何将新的键:值对添加到已经存在的数组状态变量反应原生的主要内容,如果未能解决你的问题,请参考以下文章

将新的键值对推送到 json

如何使用Immutable.js在嵌套Map中添加新的键/值对

需要使用 Objective C 将新的键和值添加到 Plist 中? [复制]

从反应组件的状态中删除密钥的最佳方法

如何在php中的数组中插入新的键值对?

使用来自 firebase 集合的键值对填充反应选择选项数组