首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JS -比较2个对象数组

JS -比较2个对象数组
EN

Stack Overflow用户
提问于 2018-11-23 10:56:29
回答 2查看 67关注 0票数 0

我正在基于JSON提要创建表视图,因此其中一个最大的问题是,当我的标签(行)保持一致时,cols上的表数据会发生变化

请参考下图

如你所见,在第二个记录值1:3应该放在第一列

这是我的对象数组:

代码语言:javascript
运行
复制
const label = [{label: 'test1', labelId:'1'},{label: 'test2', labelId:'2'}]
const cols = [
            [{labelId:'1', value:'One'},{labelId:'2', value:'Two'}],
            [{labelId:'1', value:'Three'}],
            [{labelId:'2', value:'Four'}]
         ]

我希望能够比较它们,这样我就可以指出哪一个没有对应的标签。因此,我将能够用空的<td></td>替换它们

因此,作为一个建议,这是我的尝试:

代码语言:javascript
运行
复制
    const labelCols = cols.map(col => {
        const arrayOfMatch = labels.findIndex(label => label.labelId === col.labelId);
        console.log(col)
        if(arrayOfMatch !== 1) { //matching label exists
        return { ...col, ...labels[arrayOfMatch] };
        } else {
        return { ...col, label: '' }; // insert empty label
        }
    });
    console.log(labelCols)

我希望我的JSON会是这样的:

代码语言:javascript
运行
复制
const cols = [
            [{labelId:'1', value:'One'},{labelId:'2', value:'Two'}],
            [{labelId:'1', value:'Three'},{}],
            [{},{labelId:'2', value:'Four'}]
         ]

如果有人能想出更好的解决方案,请告诉我

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2018-11-23 11:22:59

我认为您正在尝试“合并”您的对象,然后从中生成表行。考虑到你的对象实际上是这样的:

代码语言:javascript
运行
复制
  const labels = [{label: 'test1', labelId:'1'},{label: 'test2', labelId:'2'}];
  const cols = [{labelId:'1', value:'One'},
                {labelId:'2', value:'Two'},
                {labelId:'3', value:'Three'},
                {labelId:'4', value:'Four'},
              ];

  const labelCols = cols.map(col => {
    const arrayOfMatch = labels.findIndex(label => label.labelId === col.labelId);
    if(arrayOfMatch !== -1) { //matching label exists
      return { ...col, ...labels[arrayOfMatch] };
    } else {
      return { ...col, label: '' }; // insert empty label
    }
  });

labelCols将包含如下内容:

代码语言:javascript
运行
复制
labelCols = [{labelId:'1', value:'One', label: 'test1'},
             {labelId:'2', value:'Two', label: 'test2'},
             {labelId:'3', value:'Three', label: ''},
             {labelId:'4', value:'Four', label: ''},
            ];

然后,如果要呈现带有标签的td元素,请执行以下操作:

代码语言:javascript
运行
复制
  <table>
    //other codes
    <tr>
      {labelCols.map(item => <td>{item.label}</td>)}
    </tr>
    //other codes
  </table>
票数 1
EN

Stack Overflow用户

发布于 2018-11-23 11:12:29

代码语言:javascript
运行
复制
// For comparing two array, array must be with same type of same length
var isEqualArray = labels.map((label)=>{
    cols.map((col)=> label.labelId === col.labelId)
}).filer((item) => item === true)
  .length === labels.length;


if (isEqualArray ) {
    // Equal
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53440147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档