如何从另一个json对象设置json对象的值?

时间:2016-02-25 06:56:47

标签: javascript angularjs json

我有两个json对象:if(flashMode == CameraView.CAMERA_FLASH_ON){ Log.e("CAMERA 2", "FLASH ON"); mPreviewCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH); }else if(flashMode == CameraView.CAMERA_FLASH_OFF){ Log.e("CAMERA 2", "FLASH OFF"); mPreviewCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF); }else if(flashMode == CameraView.CAMERA_FLASH_AUTO){ Log.e("CAMERA 2", "FLASH AUTO"); mPreviewCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); } mFlashMode = flashMode; if (mCameraCaptureSession != null) { mCameraCaptureSession.close(); mCameraCaptureSession = null; } createCameraPreviewSession(); 。我需要根据id从a, b json对象设置seqNob json对象。我该怎么做呢?

a

输出: -

var a = [{id: "Make",   seqNo: 4},
            {id: "Model",  seqNo: 1},
            {id: "XModel", seqNo: 2},
            {id: "Rate",   seqNo: 3},
            {id: "Price",  seqNo: 0}];

var b = [
           {id: "Make", field: "make", seqNo: setvalue},
           {id: "Model", field: "model", seqNo: setvalue},
           {id: "XModel", field: "model", seqNo: setvalue},
           {id: "Rate", field: "price", seqNo: setvalue},
           {id: "Price", field: "price", seqNo: setvalue}
        ];

7 个答案:

答案 0 :(得分:1)

我会尝试这样的事情:

var mapped_a = a.reduce(function(result, element) {
    result[element.id] = element.seqNo;
    return result;
}, {});

// mapped_a => {Make: 4, Model: 1,.. }

var mapped_b = b.map(function(element) {
    var newElement = {
        id: element.id,
        field: element.field,
        seqNo: mapped_a[element.id]
    };
    return newElement;
});

在第一步中,我将数组转换为对象图。然后我可以通过map函数中的数组语法访问正确的元素。

答案 1 :(得分:1)

假设订单相同:

var setvalue="";
var a = [{id: "Make",   seqNo: 4},
         {id: "Model",  seqNo: 1},
         {id: "XModel", seqNo: 2},
         {id: "Rate",   seqNo: 3},
         {id: "Price",  seqNo: 0}];

var b = [{id: "Make", field: "make", seqNo: setvalue},
         {id: "Model", field: "model", seqNo: setvalue},
         {id: "XModel", field: "model", seqNo: setvalue},
         {id: "Rate", field: "price", seqNo: setvalue},
         {id: "Price", field: "price", seqNo: setvalue}
        ];

var c=[];
for (var i=0;i<a.length;i++) {
  var aItem = a[i], bItem=b[i];
  c.push({ headerName:aItem.id, field:bItem.field, seqNo: aItem.seqNo });
}
console.log(c);
document.write(JSON.stringify(c, null, 2).replace(/},/g,"},<br/>"));

答案 2 :(得分:0)

如果您使用 underscorejs ,则应使用以下代码合并两个对象

_.extend({id: "Make", field: "make", seqNo: setvalue}, {id: "Make", seqNo: 4})

如果您正在使用 Jquery ,那么此代码

$.extend({id: "Make", field: "make", seqNo: setvalue}, {id: "Make", seqNo: 4})

如果您需要普通javascript 功能,可以在以下位置找到:http://youmightnotneedjquery.com/

所以,你有两个对象数组,所以你需要使用 map 或其他方法来遍历你的数组并为每个元素申请扩展函数。

答案 3 :(得分:0)

这里是循环解决方案,假设两个数组中的对象数量相等,以获得令人满意的结果

var a = [{id: "Make",   seqNo: 4},
            {id: "Model",  seqNo: 1},
            {id: "XModel", seqNo: 2},
            {id: "Rate",   seqNo: 3},
            {id: "Price",  seqNo: 0}];

var b = [
           {id: "Make", field: "make", seqNo: 'setvalue'},
           {id: "Model", field: "model", seqNo: 'setvalue'},
           {id: "XModel", field: "model", seqNo: 'setvalue'},
           {id: "Rate", field: "price", seqNo: 'setvalue'},
           {id: "Price", field: "price", seqNo: 'setvalue'}
        ];

b = b.map(function (obj) {
    a.forEach(function (aObj,aIndex) {
        if (obj.id == a[aIndex].id) {
            obj["seqNo"] = a[aIndex].seqNo;
        }
    })
    return obj;
})
console.log(b)

// Sample result
[ { id: 'Make', field: 'make', seqNo: 4 },
  { id: 'Model', field: 'model', seqNo: 1 },
  { id: 'XModel', field: 'model', seqNo: 2 },
  { id: 'Rate', field: 'price', seqNo: 3 },
  { id: 'Price', field: 'price', seqNo: 0 } ]

答案 4 :(得分:0)

感谢这个具有挑战性的问题。

这是我使用lodash的解决方案:

var c = _.zipWith(b, a, function(obj1, obj2) {
    var object= _.assign({}, obj1, obj2);
    object.headerName = object.id; 
    delete object.id; 
    return object;
});

console.log(c);

答案 5 :(得分:0)

这是您的代码:

var a = [{id: "Make",   seqNo: 4},
        {id: "Model",  seqNo: 1},
        {id: "XModel", seqNo: 2},
        {id: "Rate",   seqNo: 3},
        {id: "Price",  seqNo: 0}];

// make it null of seqNo
var b = [
       {id: "Make", field: "make", seqNo: null},
       {id: "Model", field: "model", seqNo: null},
       {id: "XModel", field: "model", seqNo: null},
       {id: "Rate", field: "price", seqNo: null},
       {id: "Price", field: "price", seqNo: null}
    ];

在此处设置值

只要做到:

   if(a.length == b.length){
      for(var i=0; i<a.length;i++){
         b[i].seqNo = a[i].seqNo;
      }
    }
    else{ console.log('Error','length not Match')}

也可以选择

如果您有两个对象,则可以直接分配:

var b = [
       {id: "Make", field: "make", seqNo: a[0].seqNo},
       {id: "Model", field: "model", seqNo: a[1].seqNo},
       {id: "XModel", field: "model", seqNo: a[2].seqNo},
       {id: "Rate", field: "price", seqNo: a[3].seqNo},
       {id: "Price", field: "price", seqNo: a[4].seqNo}
    ]; 

希望为您提供帮助...

答案 6 :(得分:-1)

我建议在javascript中使用for循环。

var a = [{id: "Make",   seqNo: 4},
        {id: "Model",  seqNo: 1},
        {id: "XModel", seqNo: 2},
        {id: "Rate",   seqNo: 3},
        {id: "Price",  seqNo: 0}];
var b = [
       {id: "Make", field: "make", seqNo: 0},
       {id: "Model", field: "model", seqNo: 0},
       {id: "XModel", field: "model", seqNo: 0},
       {id: "Rate", field: "price", seqNo: 0},
       {id: "Price", field: "price", seqNo: 0 }
    ];
for (var iB in b) {
   for(var iA in a){

   var objB = b[iB];
   var objA = a[iA];
        if(objB.id == objA.id ){
          objB.seqNo = objA.seqNo;
        }
    }
}
console.log(b)

JSfiddle Link

希望它有所帮助。