尝试在TypeScript中使用带有get-or-default语句的map()

时间:2019-01-23 10:11:26

标签: typescript

本质上,我想在字典上使用.map()对特定键中的每个元素执行一条语句。语句本身就是我需要按用户名输入用户名,并在另一个数组中检查它,并且: -如果用户名存在,则记录数组中包含的值; -否则,记录0;

好的,首先,感谢您的旅行帮助!

第二,您需要知道我的背景是数据分析而不是编程,我通常使用Python,但是为此,我正在与IT团队负责人合作,他坚持使用TypeScript,所以我们就在这里。

基本上,我有以下对象: 1.字典allEntries:{     有效:布尔值;     用户:字符串; 2.另一本字典,其中包含数组intUsernames:string [] []和桩(stakes):[],我们希望在适当的地方记录

我需要遍历allEntries,检查intUsernames中的每个用户名是否在其中,如果存在,则记录其相应的“ stakes”值;否则,记录0。

 let values = allEntries.map(element => intUsernames[element.user] || 0);

但是后来我意识到这可能不起作用,因为我需要访问每个条目的本金值,所以我尝试了:

  let values = [];
  for (let entry of allEntries) {
    if (entry.user !in result.interestingUsers) {
      values.fill("0")
    }
    else {
      values.fill(result.interestingUsers.map(function (userEntry){ return [userEntry.stakes]}))
  };

期望值的数组[] []为[0]或自然数。但是,使用第一种方法,我得到的数组只有[0],而使用第二种方法,我得到的数组是空的[]。

1 个答案:

答案 0 :(得分:0)

这是您想要的吗?

const allEntries = [{ user: "foo", stake: 500 }, { user: "bar", stake: 100 }];
const result = {
  interestingUsers: ["foo"]
};

const values = [];

allEntries.forEach((entry, index) => {
  const found = result.interestingUsers.find(el => entry.user === el);
  values[index] = found ? entry.stake : 0;
});

console.log(values); // [ 'foo', 0 ]

尽管我不确定您打算如何实现此目标,但是我认为,最好不要仅创建一个具有值的新数组,这将是一个更好的主意,但很难跟踪哪个“风险”是哪个“用户”。

这样做可能会更好:

const allEntries = [{ username: "foo", stake: 500 }, { username: "bar", stake: 100 }];
const result = { interestingUsers: ["foo"] };

const filteredUsers = allEntries.filter(entry => result.interestingUsers.includes(entry.username))


console.log(filteredUsers); // [ { username: "foo", stake: 500 }, 0 ]

请注意,要使.includes工作,您可能必须确保在tsconfig.json中将compilerOptions.target = 2016设置为