Pra*_*yar 10 arrays comparison angular
这是我的第一个 JSON 数组格式:
this.columnNames = [
{field : "Name"},
{field : "Address"},
{field : "Age"}
];
Run Code Online (Sandbox Code Playgroud)
这是我的第一个 JSON 数组格式:
this.rowData = [
{Name : "Praveen",Address : "aiff",Age : "12",w : "1",e : "8"},
{Name : "Akashay",Address : "xvn",Age : "15",w : "2",e : "7"},
{Name : "Bala",Address : "hjk",Age : "16",w : "3",e : "6"},
{Name : "Charu",Address : "sss",Age : "17",w : "4",e : "5"},
];
Run Code Online (Sandbox Code Playgroud)
在这里,我想比较第一个array(columnNames)数组中的 VALUE和第二个数组中的 KEYS。如果相等,那么我想将第二个匹配的数据推array(rowData)送到新数组中。
我希望我的最终结果是这样的:
public rowData: any =[
{Name : "Praveen",Address : "aiff",Age : "12"},
{Name : "Akashay",Address : "xvn",Age : "15"},
{Name : "Bala",Address : "hjk",Age : "16"},
{Name : "Charu",Address : "sss",Age : "17"},
];
Run Code Online (Sandbox Code Playgroud)
Nic*_*ons 10
columnNames使用.map().从数组中的每个对象中获取字段。然后,将每个对象映射rowData到使用创建的新对象.reduce(),该对象仅包含fields数组中的键:
const columnNames = [
{field : "Name"},
{field : "Address"},
{field : "Age"}
];
const rowData = [
{Name : "Praveen",Address : "aiff",Age : "12",w : "1",e : "8"},
{Name : "Akashay",Address : "xvn",Age : "15",w : "2",e : "7"},
{Name : "Bala",Address : "hjk",Age : "16",w : "3",e : "6"},
{Name : "Charu",Address : "sss",Age : "17",w : "4",e : "5"},
];
const fields = columnNames.map(({field}) => field); // get array ["Name", "Address", "Age"]
const result = rowData.map( // map each object in rowData to a new object
o => fields.reduce((obj, k) => ({...obj, [k]: o[k]}), {})
// ^^ construct the new object, using reduce, spread syntax and computed property names
);
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important;} /* ignore */Run Code Online (Sandbox Code Playgroud)
如果您可以支持Object.fromEntries()(它采用嵌套[key, value]对的数组并从中构建一个对象),则无需使用.reduce():
const columnNames = [
{field : "Name"},
{field : "Address"},
{field : "Age"}
];
const rowData = [
{Name : "Praveen",Address : "aiff",Age : "12",w : "1",e : "8"},
{Name : "Akashay",Address : "xvn",Age : "15",w : "2",e : "7"},
{Name : "Bala",Address : "hjk",Age : "16",w : "3",e : "6"},
{Name : "Charu",Address : "sss",Age : "17",w : "4",e : "5"},
];
const fields = columnNames.map(({field}) => field);
const result = rowData.map(
o => Object.fromEntries(fields.map(k => [k, o[k]]))
);
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important;} /* ignore */Run Code Online (Sandbox Code Playgroud)
您可以filter基于columnNames数组创建对象属性,然后使用Object.fromEntries以下方法创建对象:
const result = rowData.map(s => Object.fromEntries(
Object.entries(s).filter(([k, v]) => columnNames.some(cl => cl.field == k))));
Run Code Online (Sandbox Code Playgroud)
一个例子:
const result = rowData.map(s => Object.fromEntries(
Object.entries(s).filter(([k, v]) => columnNames.some(cl => cl.field == k))));
Run Code Online (Sandbox Code Playgroud)
或更可调试的版本:
const result = rowData.map(s => {
let allProperties = Object.entries(s);
let filteredProperties = allProperties.filter(([k, v]) =>
columnNames.some(cl => cl.field == k));
let result = Object.fromEntries(filteredProperties);
return result;
})
Run Code Online (Sandbox Code Playgroud)
一个例子:
let columnNames = [
{field : "Name"},
{field : "Address"},
{field : "Age"}
];
let rowData = [
{Name : "Praveen",Address : "aiff",Age : "12",w : "1",e : "8"},
{Name : "Akashay",Address : "xvn",Age : "15",w : "2",e : "7"},
{Name : "Bala",Address : "hjk",Age : "16",w : "3",e : "6"},
{Name : "Charu",Address : "sss",Age : "17",w : "4",e : "5"},
];
const result = rowData.map(s => Object.fromEntries(
Object.entries(s).filter(([k, v]) => columnNames.some(cl => cl.field == k))));
console.log(result);Run Code Online (Sandbox Code Playgroud)
Object.fromEntries是将键值对列表转换为对象的方法。
下面一行表示我们基于数组filter() 数组。allProperiescolumnNames
true如果某些属性columnNames存在于 中,则some()方法返回allProperties:
let filteredProperties = allProperties.filter(([k, v]) =>
columnNames.some(cl => cl.field == k));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
739 次 |
| 最近记录: |