如何合并这些数组/json 对象
How to merge these arrays/json objects?
在这一点上,我对什么是对象,什么是数组以及什么是JSON有点困惑。 有人可以解释两者之间的语法差异吗?以及如何向每种类型添加项目,如何合并每种类型等等? 我正在尝试让这个函数从 JSON 对象(我认为)中获取新信息并将其与一些新信息合并。 然后,此信息将被传递到 PHP 脚本进行处理。
以下是控制台输出:
{"public":{"0":["el29t7","3bmGDy"]}}
{"public":"[object Object][object Object]"}
这是我正在使用的 JS:
/* Helper function to clean up any current data we have stored */
function insertSerializedData(ids, type) {
// Get anything in the current field
current_data = $('#changes').val();
if (!current_data) {
var data = {};
data[index++] = ids;
var final_data = {};
final_data[type] = data;
$('#changes').val(JSON.stringify(final_data));
} else {
current_data = JSON.parse(current_data);
var data = {};
data[index++] = ids;
// Does the index exist?
if (type in current_data) {
var temp_data = current_data[type];
current_data[type] = temp_data + data;
} else {
current_data[type] = data;
}
//var extra_data = {};
//extra_data[type] = data;
//$.merge(current_data, extra_data);
$('#changes').val(JSON.stringify(current_data));
}
console.log($('#changes').val());
}
这个想法是,如果密钥(公共或其他任何密钥)尚不存在,则使其指向数组数组。 如果它确实存在,那么数组数组的数组需要与新数组合并。 例如:
如果我有
{"public":{"0":["el29t7","3bmGDy"]}}
我想将其与
["aj19vA", "jO71Ba"]
那么最终结果将是:
{"public":{"0":["el29t7","3bmGDy"], "1":["aj19vA", "jO71Ba"]}}
我该怎么做呢? 谢谢
优秀的两部分问题。总的来说,第二个问题并不平凡,因为第一个问题很复杂。
问题1:
什么是对象,什么是数组,什么是 JSON。有人可以 解释两者之间的语法差异?
问题2:
以及如何向每个项目添加项目,
问题3:
如何合并每种类型等等?
答案 1:
这是一个常见的绊脚石,因为JavaScript比人们最初预期的更灵活。这是曲线。
在 JavaScript 中,一切都是一个对象。
所以这是每个的代码:
//What is an object?
var obj = { };
var obj2 = { member:"value", myFunction:function(){} }
上面是一个空对象。然后是另一个带有变量和函数的对象。它们称为对象文字。
//What is an array
var array1 = [ ] ;
var array2 = [0,1,2,3,4];
上面是一个空数组。然后是另一个包含五个整数的数组。
这是引起混乱的曲线。
//Get elements from each of the prior examples.
var x = obj2["member"];
var y = array2[1];
什么???对象和数组都使用括号访问值?这是因为两者都是对象。事实证明,这对于编写高级代码来说是一个很好的灵活性。数组是对象。
什么是 JSON?
JSON 代表 JavaScript 对象通知。正如您可能已经猜到的那样。一切都是物体...这也是一种{ };
但它是不同的,因为它用于将数据传输到 JavaScript 和 - 而不是实际(通常)在 JavaScript 中使用。它是一种文件传输格式。
var JSONObject = {"member":"value"};
与前面示例的唯一区别是引号。本质上,我们将对象文字包装为字符串,以便可以将其传输到服务器或返回,并且可以非常轻松地重新解释。比XML更好 - 因为它不必自定义解析。只需打电话,stringify()
或ParseJSON()
.谷歌一下。关键是...JSON可以转换为对象文字JS对象,JS对象文字可以转换为JSON,例如传输到服务器或CouchDB数据库。
对不起,切线。
答案 2:
如何为每个项目添加一个项目?这就是曲线不再令人讨厌的地方,并开始变得很棒!因为一切都是物体,所以一切都差不多。
//Add to an object
var obj {member1:"stringvalue"}
obj.member2 = "addme"; //That is it!
//Add to an array
var array1 [1,2,3,4,5];
array1[0] = "addme";
array[6] = null;
//We shouldn't mix strings, integers, and nulls in arrays, but this isn't a best-practice tutorial.
记住JS对象语法,你可能会开始看到一个全新的灵活的对象世界打开。但这可能需要一点时间。
答案3:啊,是的...如何合并。
有严肃(非常多)方法可以合并两个数组。这取决于您的确切需求。排序、复制、串联...有几个。
这是答案!
更新:如何制作一个漂亮的多维数组。
//Multiple Dimension Array
var array1 = [1,2,3];
var array2 = [3,4];
var arraysinArray = [array1,array2]; //That is it!
这又是曲线,这可能是在一个对象中:
var obj{
array1:[1,2,3],
array2:[3,4]
}
JavaScript是强大的东西,坚持下去;它变得很好。
希望有帮助,万事如意!Nash
在这种情况下,将 JavaScript 的对象文字{}
视为类似于 PHP 的关联数组。
鉴于此,"数组数组"实际上如下所示(使用上述所需的输出):
{public: [["el29t7","3bmGDy"], ["aj19vA", "jO71Ba"]]}
所以这里我们有一个名为"public"的单个属性的对象文字,其值是一个二维数组。
如果我们将上述分配给一个变量,我们可以像这样将另一个数组push
到"public"上:
var current_data = {public: [["el29t7","3bmGDy"], ["aj19vA", "jO71Ba"]]};
// Using direct property access
current_data.public.push(["t9t9t9", "r4r4r4"]);
// Or using bracket notation
current_data["public"].push(["w2w2w2", "e0e0e0"]);
current_data
的值现在为:
{public: [
["el29t7","3bmGDy"],
["aj19vA", "jO71Ba"],
["t9t9t9", "r4r4r4"],
["w2w2w2", "e0e0e0"]
]}
所以现在"public"是一个长度为 4 的数组。
current_data.public[0]; // ["el29t7","3bmGDy"]
current_data.public[1]; // ["aj19vA", "jO71Ba"]
current_data.public[2]; // ["t9t9t9", "r4r4r4"]
current_data.public[3]; // ["w2w2w2", "e0e0e0"]
MDN 在 Array 上有非常好的文档,可以深入了解您可能需要的其他功能。https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array
第一个是一个对象,它包含数组,第二个是一个数组。
演示显示显示输出 http://jsfiddle.net/GjQCV/
var object={"public":{"0":["el29t7","3bmGDy"]}};
var arr=["aj19vA", "jO71Ba"] ;
/* use object notation to add new property and value which is the array*/
object.public[1]=arr;
如果{"0": ...}
是一个真正的数组而不是一个对象,那会更自然,但无论如何:
function maxKey(b) {
var max;
for( var key in b )
var max = key;
return max;
}
function merge(a,b) {
for( var key in a ) {
b[key] = b[key] ? (b[key][maxKey(b)+1]=a[key], b[key]) : a[key];
}
return b;
}
请注意,这假设您将在下一个整数索引处插入
- 数组是一种特殊的Javascript对象
- JSON是一种表示Javascript对象的方式(因此可以表示数组等)
- 对象要通用得多,可以是可以表示为 JSON 的简单对象,也可以包含函数和原型。
因此,这不是数组数组(您可以使用 myobj["0"] 等 JSON 表示法访问项目):
{"0":["el29t7","3bmGDy"], "1":["aj19vA", "jO71Ba"]}
这是一个数组数组,这意味着您可以使用 push 方法来添加项目,并使用 myobj[0] 等数组表示法访问项目:
[ ["el29t7","3bmGDy"], ["aj19vA", "jO71Ba"] ]
似乎您想要的结构是这样的:
var myobj = { "public": [ ["key", "value"], ["key", "value"] ] }
然后,如果要添加/合并新项目,可以编写以下内容:
if (myobj["public"] != null) {
myobj["public"].push(["newkey", "newval"]);
} else {
myobj["public"] = ["newkey", "newval"];
}
- 为DataTables aoColumnDefs创建JavaScript数组(JSON格式)
- 使用 Javascript 将行添加到数组 json
- PHP数组JSON编码和该对象在ExtJs中解码
- 数组json转换为数组json
- 将Blob文本转换为Javascript中的数组/JSON对象
- 如何合并这些数组/json 对象
- 尝试从数组 JSON 键中删除引号
- JavaScript 中的数组 JSON
- 在数组 JSON 格式的 JavaScript 变量末尾添加新地址
- 如何访问这个Javascript数组(JSON对象?)
- rails传递记录数组(JSON)
- 按值提取对象/数组json vs数组
- 获取具有子数组json值的数组的值
- Object对象数组Json.字符串数组的字符串化
- 如何在Ext js 4.1中过滤数组json
- PHP -多维数组Json
- 正在分析数组Json以选择Tag
- 试图将字符串数据转换为数值数据,将数据放入数组的数组(Json)
- 从数组json、javascript中的specf值中删除引号
- 使用JavaScript或jQuery读取数组JSON