我想创建类似的数据结构。
Var ans =[{"b":[1,2]},{"g":[100,2]}]
如果列表ans中不存在键,我想在列表中创建一个新对象。 否则,如果密钥存在于ans列表的一个对象中,那么我想将新值添加到ans list
的对象中例如:
Example 1) new data c:{2000}
然后
Var ans =[{"b":[1,2]},{"g":[100,2]},{c:[2000]}]
示例2)新数据g:{50}
然后
Var ans =[{"b":[1,2]},{"g":[100,2,500]},{c:[2000]}]
我是节点js的初学者,理解数组,对象概念,但没有得到确切的逻辑! 谢谢!
答案 0 :(得分:2)
您可以尝试以下操作:
更正,当您执行.push({key: value})
时,key
将被视为字符串。
<强>候补强>
.push({ [key] : value })
var o = {}
。将密钥和值设置为o[key] = value
并推送此对象。<强>的优化强>
obj[key] = value
那样设置值,因为我们将在数组上运行,请尝试obj[key] = [].concat(value)
。这将使您能够将值作为数字或值数组传递。.filter
中是否存在值,而是尝试Array.isArray
检查值是否存在且类型为数组。
function checkAndPush(array, key, value) {
var filteredList = array.filter(function(o) {
return Array.isArray(o[key]);
});
filteredList.length > 0 ? filteredList[0][key].push(value) : array.push({
[key]: [].concat(value)
});
return array;
}
var ans =[{"b":[1,2]},{"g":[100,2]}]
console.log(checkAndPush(ans, "c", [2,3]))
console.log(checkAndPush(ans, "c", 4));
&#13;
Array.prototype.checkAndPush = function(key, value) {
var filteredList = this.filter(function(o) {
return Array.isArray(o[key]);
});
var dummy = {}
dummy[key] = [].concat(value)
filteredList.length > 0 ? filteredList[0][key].push(value) : this.push(dummy);
// or ES6: this.push({ [key]: [].concat(value) })
return this;
}
var ans =[{"b":[1,2]},{"g":[100,2]}]
console.log(ans.checkAndPush("c", [2,3]))
console.log(ans.checkAndPush("c", 4));
&#13;
答案 1 :(得分:1)
如果您正在处理对象作为您的值
ans[key] = ans[key] || []
ans[key].push(value)
注意,这是有效的,因为您的值将是一个数组。如果它们可能是原始的,那么你可以使用hasOwnProperty进行检查。
if (ans.hasOwnProperty(key)) {
// Add this to your key somehow
} else {
// initialize the key with your value
}
答案 2 :(得分:0)
Node.js只是一个基于javascript构建的库。你可以使用javascript类型的progmming做任何事情。但是push和pop方法应该能够帮助你处理nodejs数组。 ANS [键] .push(值)