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

Typecript:打印包含数组的对象的键/值(no foreach)

竺国兴
2023-03-14

我试图从包含数组的对象中提取值。以下是对象的外观:

export const myBookList: Row[] =
[
    {
        bookInfo: [
            {
                title: "The jungle book",   
                isbn: "42398486965239671234",
                Author: "Rudyard Kipling"
            },
            {
                title: "20,000 Leagues Under the Sea",
                isbn: "42234486234239675678",
                Author: "Jules Verne"
            },
            {
                title: "The Call of the Wild",
                isbn: "4239848696523967670",
                Author: "Jack London"
            }
        ],
        value: [],
        id: 0
    },
    {
        bookInfo: [
            {
                title: "The jungle book 2",   
                isbn: "327865923874659276",
                Author: "Rudyard Kipling"
            },
            {
                title: "20,000 Leagues Under the Sea 2",
                isbn: "269587649587264675",
                Author: "Jules Verne"
            },
            {
                title: "The Call of the Wild",
                isbn: "2378687827584758765",
                Author: "Rudyard Kipling"
            }
        ],
        value: [],
        id: 1
    }
];

我想遍历对象的所有键和值(尤其是数组bookInfo中的键/值),当找到与传递的字符串参数“myKey”匹配的键时,我想返回键值。下面的代码工作正常,但由于myBookList上的条目不止一个...当我发现我匹配时,由于每次迭代的原因,我无法退出该过程(typecript中的foreach不接受中断或返回),并且我总是得到对象的最后一个条目。如何解决这个问题?

getValue(data: Row, myKey: string): string {
let retValue: string = "";
data.forEach(function(item) {
    item.bookInfo.forEach(function(key, index){
        console.log(key, index);
        if (key===myKey) {
            console.log(key, index);
            ret=key.value;
        }

     });
});
return retValue;

}

共有1个答案

公孙智
2023-03-14

您可以使用循环。当您满足条件时,我们可以使用返回语句来获取所需的值:

const getValue = (data, myKey) => {
  let i = 0;

  while (data.length > i) {
      let bookInfoIndex = data[i].bookInfo
                                 .findIndex(f => Object.keys(f).includes(myKey));
      if (bookInfoIndex != -1)
        return data[i].bookInfo[bookInfoIndex][myKey];

      i++;
  }
}

例如:

let arr = [{bookInfo: [{title: "The jungle book",isbn: "42398486965239671234",Author: "Rudyard Kipling"}, {title: "20,000 Leagues Under the Sea",isbn: "42234486234239675678",Author: "Jules Verne"      },{title: "The Call of the Wild",isbn: "4239848696523967670",Author: "Jack London"}],  value: [],    id: 0  },
  { bookInfo: [{title: "The jungle book 2",isbn: "327865923874659276",Author: "Rudyard Kipling" },   {title: "20,000 Leagues Under the Sea 2",isbn: "269587649587264675",Author: "Jules Verne"}, {title: "The Call of the Wild",isbn: "2378687827584758765",Author: "Rudyard Kipling"}], value: [], id: 1 }];

const getValue = (data, myKey) => {
  let i = 0;

  while (data.length > i) {
      let bookInfoIndex = data[i].bookInfo.findIndex(f => Object.keys(f).includes(myKey));
      if (bookInfoIndex != -1)
        return data[i].bookInfo[bookInfoIndex][myKey];

      i++;
  }
}

console.log(getValue(arr, 'title'));
 类似资料:
  • 问题内容: 我正在尝试打印地图的值,该地图的键上有一个点()。 示例图: 我试过了: 但得到: 和 但得到: 请注意,我能够成功打印没有点的键的值。 问题答案: 正如@ martin-ghallager所说,需要使用外部函数来访问这些元素。 有用的是,标准库已经提供了index函数(它的功能完全与Martin的功能相同)。 要使用它,只需编写: 万一密钥不存在,该函数将返回默认值。如果您的词典具有

  • 问题内容: 我不知道如何将可变数量的变量传递给函数。我认为传入一个数组并使用数组键作为变量名可以代替将额外的变量传递给函数的需要,并且它起作用了(我敢肯定有一种更好的方法可以做到这一点,欢迎提出建议)。但是,我似乎无法从函数内部的数组中获取键。 数组: 函数内部: 函数内部的代码重新发出警告:为foreach()提供了无效的参数。如何将键从阵列中拉出? 问题答案: 您可以使用PHP的array_k

  • 问题内容: 好的,所以我试图从我用来学习Java的书中进行练习。这是我到目前为止的代码: 以下是确切措词的练习: 修改类Calculator.java,以将所有数字按钮保留在声明为10个元素的数组中,如下所示: 替换从10开始的行 带有创建按钮并将其存储在此数组中的循环。 好的,所以我尝试使用声明数组,但这给了我错误: 这行有多个标记- 按钮无法解析为类型- 按钮无法解析为类型 相反,我尝试了这个

  • 我有这个JSON: 我想打印键值对,其中键匹配状态和选项,以及时间和它的值。我可以通过使用下面的命令打印时间和所有键值对,但不确定如何提取特定的键值对。 这将产生以下输出: 但我想要的结果是:

  • 我希望在每个数组中获取多个对象,但我的代码显示了单个对象的操作。下面是我的PHP代码,我如何添加另一个循环来获取多个对象 这是显示单个物体的结果

  • 问题内容: 我如何让 jq 像这样使用json: 并生成以下输出: 我对格式不感兴趣,只是不知道如何访问键名和值。 问题答案: 要将顶级键作为流获取,可以使用内置函数 。因此,针对您的特定问题的一种解决方案是: 按排序顺序生成密钥名称;如果要按原始顺序使用它们,请使用。 另一种以原始顺序生成密钥的替代方法是: CSV和TSV输出 @csv和@tsv过滤器在这里也可能值得考虑,例如 产生: 嵌入式对