如何合并这些数组/ json对象?

Mas*_*rry 6 javascript jquery

关于什么是对象,什么是数组,什么是JSON,我有点困惑.有人可以解释两者之间的语法差异吗?以及如何向每个项目添加项目,如何合并每种类型,等等?我试图让这个函数从JSON对象中获取新信息(我认为)并将其与一些新信息合并.然后,此信息将传递给要处理的PHP脚本.

这是控制台输出:

{"public":{"0":["el29t7","3bmGDy"]}} 
{"public":"[object Object][object Object]"} 
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的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());
}
Run Code Online (Sandbox Code Playgroud)

这个想法是,如果密钥(公共或其他任何其他)尚不存在,那么使它指向一个数组数组.如果确实存在,那么数组数组需要与新数组合并.例如:

如果我有

{"public":{"0":["el29t7","3bmGDy"]}}  
Run Code Online (Sandbox Code Playgroud)

我想把它合并

["aj19vA", "jO71Ba"] 
Run Code Online (Sandbox Code Playgroud)

然后最终结果将是:

{"public":{"0":["el29t7","3bmGDy"], "1":["aj19vA", "jO71Ba"]}} 
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?谢谢

Jac*_*one 8

优秀的两部分问题.总的来说,第二个问题是非平凡的,因为第一个问题很复杂.

问题1:

什么是对象,什么是数组,什么是JSON.有人可以解释两者之间的语法差异吗?

问题2:

以及如何向每个项目添加项目,

问题3:

如何合并每种类型,等等?

答案1:

这是一个常见的绊脚石,因为JavaScript比最初期望的更灵活.这是曲线.

在JavaScript中,一切都是对象.

所以这里是每个代码:

//What is an object?
var obj = { };                

var obj2 = { member:"value", myFunction:function(){} }
Run Code Online (Sandbox Code Playgroud)

上面是一个空物体.然后是另一个带变量和函数的对象.它们被称为对象文字.

//What is an array 
var array1 = [ ] ;     

var array2 = [0,1,2,3,4];
Run Code Online (Sandbox Code Playgroud)

上面是一个空数组.然后另一个数组有五个整数.

这是引起混淆的曲线.

//Get elements from each of the prior examples.
var x = obj2["member"];
var y = array2[1];
Run Code Online (Sandbox Code Playgroud)

什么???Object和Array都使用括号访问值?这是因为两者都是对象.这对于编写高级代码来说是一个很好的灵活性.数组是对象.

//什么是JSON?

JSON代表JavaScript Object Notiation.你可能已经猜到了.一切都是一个对象...它也是一个{ };但它是不同的因为 - 它用于将数据传输到 - 和 - 从JavaScript传输,而不是 JavaScript中实际使用(通常).它是一种文件传输格式.

var JSONObject = {"member":"value"};
Run Code Online (Sandbox Code Playgroud)

与前一个例子的唯一区别是引号.本质上,我们将对象文字包装为字符串,以便可以将其传输到服务器或返回,并且可以非常轻松地重新解释.优于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.
Run Code Online (Sandbox Code Playgroud)

记住JS对象语法,你可能会开始看到一个全新的灵活的对象世界.但可能需要一点时间.

答案3:啊,是的......如何合并.

合并两个数组的方法非常多(非常多).这取决于你需要什么.排序,重复,连接......有一些.

这是答案!

更新:如何制作漂亮的多维数组.

//Multiple Dimension Array
var array1 = [1,2,3];
var array2 = [3,4];

var arraysinArray = [array1,array2]; //That is it!
Run Code Online (Sandbox Code Playgroud)

这是曲线,这可能是一个对象:

var obj{
   array1:[1,2,3],
   array2:[3,4]
}
Run Code Online (Sandbox Code Playgroud)

JavaScript是强大的东西,坚持下去; 它变得很好.:)

希望有所帮助,一切顺利!纳什