在 JavaScript 中将对象转换为数组以进行存储并返回数组以用于应用程序
Posted
技术标签:
【中文标题】在 JavaScript 中将对象转换为数组以进行存储并返回数组以用于应用程序【英文标题】:Convert object to array for storage and back to array for application in JavaScript 【发布时间】:2016-03-08 20:56:07 【问题描述】:我有一个这样的对象,它是从 angular 中的动态复选框生成的:
"United States":true,"Canada":true,"Australia":false
它在存储值方面效果很好,但是为了能够对国家/地区值进行数据库搜索,我希望能够将其转换为数组以将其保存到数据库(MongoDb/Mongoose)中,例如:
["United States":true,"Canada":true,"Australia":false]
然后将其转换回与应用程序完全相同的对象类型。
最简单的方法是什么?
【问题讨论】:
我认为["United States":true,"Canada":true,"Australia":false]
的数组语法不正确。
下划线或 Lodash:_.pairs(myObj)
假设你想要对
好吧,我不一定需要数组的 :true 部分,我只需要存储真实值...最重要的是我可以将它存储为数组,然后如果我从数据库中检索到它,就可以将它转换回同一个对象。
如果您只存储 true
值,您会更改要存储的值的数量,并且无法准确地重新创建原始对象。为什么不能将对象存储在 Mongo 中? mongodb.github.io/node-mongodb-native/api-articles/…
LukeP,在下划线中使用 _.pair(myObj) 函数似乎很容易。他们有类似的命令将结果转换回对象吗?
【参考方案1】:
我可能会将这些值插入为:
"string", boolean, "string", boolean, "string", boolean
为此:
// Taking the object...
var countryObject = "United States":true,"Canada":true,"Australia":false;
// ... and simplifying for explanation as:
var countryObject = "A":true,"B":true,"C":false;
var compact = [];
for(var prop in countryObject)
compact.push( prop );
compact.push( countryObject[prop] );
// compact yields interpolated values as a basic array:
// ["A", true, "B", false, "C", true];
仅供参考:您现在可以通过查找字符串值的索引然后加 1 以通过加 1 来检索布尔值来非常有效地搜索数组:
var foundIndex = compact.indexOf("B");
var result;
if(foundIndex > -1)
result = countryArray[foundIndex + 1];
重新拼凑:
var compact = ["A", true, "B", false, "C", true];
var countryObject = ;
for(var i=0; i<compact.length; i+= 2)
countryObject[compact[i]] = compact[i+1];
【讨论】:
非常感谢,您的解决方案非常有效。【参考方案2】:您所要求的实际上没有意义,因为您演示的数组是一个具有键:值对的关联数组,在 javascript 中,它是一个对象。
您可以创建一个数组并为其分配键:值对,如下所示:
var a = [];
a['test'] = 1;
不过,这只是在利用 数组是 JavaScript 中的对象这一事实。
【讨论】:
那么您知道有什么方法可以仅将正确的国家/地区存储为数组,然后在应用程序需要时将其转换回与原始对象类似的对象吗?以上是关于在 JavaScript 中将对象转换为数组以进行存储并返回数组以用于应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何在javascript中将嵌套对象转换为对象数组? [关闭]
如何在 Javascript 中将表单数组转换为 JSON? (对象数组)?