我有一个数据库函数,该函数从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
的名称取决于{>
答案 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"