无法动态比较两个数组的数组值

时间:2018-03-27 07:01:57

标签: javascript angular typescript

我有两个角度数组。

一个是常规数组A,其值为['Stock_Number','Model','Type','Bill_Number']

另一个是关联的数组B,如下所示

0:[
  {
    'Stock_Number': 'GTH738', 
    'Model': 'sample_model', 
    'Type': 'sample_type', 
    'Bill_Number': 7784754,
    'some_prop1': 'prop1_val',
    'some_prop2': 'prop2_val'
  }
];

两个阵列都是动态的。 B还有比A更多的列.A有B的键(A是B的子集)我想得到一个新的数组C只用于A中的元素。为此我要检查B中是否存在键。以下是我的代码

for(var i=0,j=0; i<B.length,j<A.length; i++,j++){
        if (!B.hasOwnProperty(A)) {
           var value = A[j];
                console.log('if-'+value); //printing value 
                console.log(B[0].value); // printing undefined 
               // C.push(B[0].value);
        }else{
            //some code
        }
    }

结果数组应该类似于以下

{
'Stock_Number': 'GTH738', 
'Model': 'sample_model', 
'Type': 'sample_type', 
'Bill_Number': 7784754
}

有人可以建议我如何实现这一目标吗?

4 个答案:

答案 0 :(得分:1)

您可以使用此方法。为了更好的例子你需要我在B数组的对象上添加了一些不在数组A中的额外属性。因此,这些属性被排除在数组C中的对象之外

var A = ['Stock_Number', 'Model', 'Type', 'Bill_Number'];
var B = [
  {
    'Stock_Number': 'GTH738', 
    'Model': 'sample_model', 
    'Type': 'sample_type', 
    'Bill_Number': 7784754
  },
  {
    'Stock_Number': 'GTH740', 
    'Model': 'sample_model2', 
    'Type': 'sample_type2', 
    'Bill_Number': 7784754,
    'someProp1': 1,
    'someProp2': 2,
  }
];

var C = [];
for(var i=0; i<B.length; i++){
  var obj = B[i];
  var objKeys = Object.keys(obj);
  var resObj = {};
  A.forEach(function(itemA){
    if(objKeys.indexOf(itemA) !== -1){
      resObj[itemA] = obj[itemA];
    }
  });
  C.push(resObj);
}

console.log(C);

答案 1 :(得分:0)

只需替换

console.log(B[0].value); 

console.log(B[0][value]);

答案 2 :(得分:0)

您可以过滤未知密钥并从剩余密钥中构建新对象。

&#13;
&#13;
var arrayA = ['Stock_Number', 'Model', 'Type', 'Bill_Number'],
    arrayB = [{ Stock_Number: 'GTH738', Model: 'sample_model', Type: 'sample_type', Bill_Number: 7784754 }, { Stock_Number: 'GTH738', Model: 'sample_model', Type: 'sample_type', Bill_Number: 7784754, foo: 'bar', baz: 42 }],
    result = [];

arrayB.forEach(function (b) {
    keys = Object.keys(b).filter(k => !arrayA.includes(k));
    if (keys.length) {
        result.push(Object.assign(...keys.map(k => ({ [k]: b[k] }))));
    }
});

console.log(result);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

var A = ['Stock_Number', 'Model', 'Type', 'Bill_Number'];
var B = [
  {
    'Stock_Number': 'GTH738', 
    'Model': 'sample_model', 
    'Type': 'sample_type', 
    'Bill_Number': 7784754
  },
  {
    'Stock_Number': 'GTH740', 
    'Model': 'sample_model2', 
    'Type': 'sample_type2', 
    'Bill_Number': 7784754,
    'someProp1': 1,
    'someProp2': 2,
  }
];

var C = B.map(item =>{
    let obj = {};
    A.forEach(key => {
        obj[key] = item[key];
    });
    return obj;
});