我有两个角度数组。
一个是常规数组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
}
有人可以建议我如何实现这一目标吗?
答案 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)
您可以过滤未知密钥并从剩余密钥中构建新对象。
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;
答案 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;
});