如何向现有数组状态变量添加新的key:value对

时间:2019-05-08 04:38:39

标签: javascript sqlite react-native expo

我有一个数据库函数,该函数从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查询一样编写此代码,就可以将两个表连接在一起,然后将结果行放入一个状态变量中,但是在这种情况下我不能这样做,必须逐段构建状态变量。

这是常规的javascript吗?

编辑: 可能不是很清晰,但是newKey的名称取决于

4 个答案:

答案 0 :(得分:1)

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

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

快乐编码:)

答案 1 :(得分:1)

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

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)
  

注意:我宁愿使用带有两个表的内部联接来返回   合并不需要任何数组操作的数组。

答案 2 :(得分:0)

如果知道与给定符号对应的键值,则可以执行以下操作:

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

答案 3 :(得分:0)

尝试一下

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"