当前位置: 首页 > 知识库问答 >
问题:

前端 - js 如何弄成一维数组?

公冶高峯
2023-05-02

数据格式如下:

result{
    template{
        component:[
            0:{
                businessType: 1,
                fkId: null,
                fkId2: null,
                fkId3: null,
                id: "1186526684214359690",
                isTable: 0,
                name: "单行文本",
                sort: 1,
                tag: "s_ypmc",
                type: 1
                attr: {
                    defaultValue: "大萨达",
                    display: "inline-block",
                    fkCaseIds: "",
                    icon: "ios-paper",
                    title: "样品名称",
                    significant: "0",
                }
            },
            1:{
                attr: {
                    cutLine: "1",
                    defaultValue{
                        id: "1207679349805467446",
                        isTitle: "0",
                        oldId: "1207679349805467446",
                        val: "化学实验室",
                    },
                    desc: "",
                    display: "inline-block",
                    formulaLock: "",
                    hasOther: "0",
                    icon: "android-arrow-dropdown",
                    isExternalScan: "1",
                    isInReport: "1",
                    isOpenOther: "0",
                    required: "0",
                    ruleName: "",
                    tag: null,
                    title: "位置",
                    type: "dropdown",
                    width: "100",
                    vals: [
                        {
                            checked: "0",
                            id: "1202670341805467441",
                            isTitle: "0",
                            oldId: "1202670341805467441",
                            val: "前台"
                        },
                        {
                            checked: "0",
                            id: "1208678341802464441",
                            isTitle: "0",
                            oldId: "1208678341802464441",
                            val: "制样"
                        }
                    ]

                },
            }
        ],
        nameTemplate: "sdasdasdasdasdasdnyhyhn",
        id: "1149528905150315886",
        tag: "s_ypmc",
        type: 1
    }
}

ui效果图

目前api接口只有位置返回位置和样品名称这两个个选项, tag是表格的标识,数据太多就省列了

功能点是 点击搜索样品id得出效果图的一行数据,也就是一个id只能搜索出一条数据,
请问大佬们 这个要如何弄呢?

共有1个答案

宋昕
2023-05-02

用递归:

function flatten(obj, prefix = '', result = []) {
  for (const key in obj) {
    if (typeof obj[key] === 'object' && obj[key] !== null) {
      flatten(obj[key], prefix + key + '.', result);
    } else {
      result.push({ key: prefix + key, value: obj[key] });
    }
  }
  return result;
}

const flattened = flatten(result);
console.log(flattened);

find 查找你要的某一项:

function findValueByKey(array, key, value) {
  return array.find(item => item.key === key && item.value === value);
}

const foundItem = findValueByKey(flattened, 'template.component.0.id', '1186526684214359690');
console.log(foundItem);

接口返回处理:

async function getTabledata() {
  await this.getSampleBroswer({ params: { id: this.input.number } }).then(res => {
    if (res.status === 200) {
      const { template } = res.result;
      console.log(template);

      const flattened = flatten(template);
      console.log(flattened);

      const foundItem = findValueByKey(flattened, 'template.component.0.id', '1186526684214359690');
      console.log(foundItem);
    }
  });
}

ts+vue2:

// 在Vue组件外部定义接口
interface FlatObject {
  key: string;
  value: any;
}

// 更新flattenAndFind函数
function flattenAndFind(
  obj: any,
  targetKey: string,
  targetValue: any,
  prefix: string = '',
  result: FlatObject[] = []
): FlatObject | null {
  if (typeof obj !== 'object') {
    return null;
  }

  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      const currentKey = prefix + key;

      if (key === targetKey && obj[key] === targetValue) {
        return { key: currentKey, value: obj[key] };
      } else if (typeof obj[key] === 'object') {
        const found = flattenAndFind(obj[key], targetKey, targetValue, currentKey + '.', result);
        if (found) {
          return found;
        }
      }
    }
  }

  return null;
}

// 组件中的代码
async getTabledata(this: any) {
  await this.getSampleBroswer({ params: { id: this.input.number } }).then(res => {
    if (res.status == 200) {
      const { template } = res.result;
      console.log(template);

      // 使用flattenAndFind函数
      const targetKey = 'tag'; // 你需要查找的键
      const targetValue = 's_ypmc'; // 你需要查找的值
      const foundItem = flattenAndFind(template, targetKey, targetValue);

      if (foundItem) {
        console.log('找到的项: ', foundItem);
        // 在这里处理找到的项
      } else {
        console.log('未找到匹配的项');
      }
    }
  });
}

用这个方法试试:

async getTabledata(this: any) {
    await this.getSampleBroswer({ params: { id: this.input.number } }).then(res => {
        if (res.status == 200) {
            const { template } = res.result;
            console.log(template);

            
            const flattenedArray = template.component.map((item: any) => {
                return [
                    item.businessType,
                    item.id,
                    item.name
                ];
            }).flat();

            console.log(flattenedArray); // 输出处理后的一维数组
        }
    });
},

 类似资料:
  • [ {"itemname":"aaa","qty":100,"billno":"a001"}, {"itemname":"bbb","qty":300,"billno":"a002"}, {"itemname":"ccc","qty":200,"billno":"a004"}, {"itemname":"eee","qty":800,"billno":"a006"}, …… ] 想转换为下面这个

  • 问题内容: 我已经有了用于将一维二维转换为一维二维的代码,但是我不知道如何将其转换。这是我的代码: 问题答案: 您正在寻找类似的东西: 与以下内容相同: 但试图帮助进一步解释这个概念。

  • 问题内容: 我有一个多维数组设置,如下所示: 在该区域中搜索“名称”中的重复值并将其删除以使多维数组中的每个值都是唯一的最佳方法是什么? 提前致谢! 问题答案: 由于每个人都提供了替代方案,因此这里是解决当前问题的方法。有时,我们必须使用已有的数据,而不必按照自己喜欢的方式进行重新排列。话虽如此,这将从阵列中删除所有重复的后续条目。 看起来像这样:

  • 关于php数组合并的问题,如何把两个不同的二维数组,合并成一个二维数据?

  • 有两个不同的字符串数组。 我想把这两个数组做成一个4*2矩阵。 我怎么做这个矩阵?

  • 本文向大家介绍NumPy 如何生成多维数组的方法,包括了NumPy 如何生成多维数组的方法的使用技巧和注意事项,需要的朋友参考一下 Python现在是最热门的人工智能语言,各种工具的支持如Google的Tensorflow,都是首选支持Python的。 但是,与R语言不同,Python语言设计时,并没有考虑对于矩阵运算,统计计算等功能做专项支持。于是我们需要NumPy库来补足这一能力上的不足。 N