【问题标题】:Typescript: How to set value to empty string打字稿:如何将值设置为空字符串
【发布时间】:2020-05-05 12:15:19
【问题描述】:

我正在根据与_(下划线)分开的第一个单词对数据进行排序和分组。所以结果应该返回 3 个组(例如:orders, items and "")。我如何为该空字符串设置一些值(例如:其他)。这里是stackblitz

let rawData = [
  { name : 'orders_list', id : 10},
  { name : 'orders_price', id : 7},
  { name : 'items_list', id : 12 },
  { name : 'items_price', id : 7},
  { name : 'others-list', id : 7},
  { name : 'secondOthers-list', id : 7},
]

let data = rawData.reduce((r, e) => {

  let group = e.name.substr(0, e.name.indexOf('_'));

  if(!r[group]) {
    r[group] = {group, children: [e]}
  } else {
    r[group].children.push(e);
  }

  return r;
}, {})

let result = Object.values(data)

console.log(result)

【问题讨论】:

  • 你的 stackblitz 运行良好
  • 是的,但数组中的第三项返回空字符串。如何用“其他”值替换空字符串?
  • 用你预期的输出编写一个单元测试。

标签: angular typescript ecmascript-6 reduce setvalue


【解决方案1】:

检查一下。

// Import stylesheets
import './style.css';

// Write TypeScript code!
const appDiv: HTMLElement = document.getElementById('app');
appDiv.innerHTML = `<h1>TypeScript Starter</h1>`;

let rawData = [
  { name : 'orders_list', id : 10},
  { name : 'orders_price', id : 7},
  { name : 'items_list', id : 12 },
  { name : 'items_price', id : 7},
  { name : 'others-list', id : 7},
  { name : 'secondOthers-list', id : 7},
]


let data = rawData.reduce((r, e) => {

  let group = e.name.substr(0, e.name.indexOf('_'));

  if(!r[group]) {
    r[group] = {group, children: [e]}
  } else {
    r[group].children.push(e);
  }

  return r;
}, {})

// since data at this point is an object, to get array of values
// we use Object.values method
let result = Object.values(data)
result.filter(f=>{
  if(f.group==''){
    f.group='Others'
  }
});

console.log(result)

堆栈闪电战:https://stackblitz.com/edit/typescript-pe8k9p

【讨论】:

    【解决方案2】:

    这是我制作的一个有效的堆栈闪电战 :)

    // Import stylesheets
    import './style.css';
    
    // Write TypeScript code!
    const appDiv: HTMLElement = document.getElementById('app');
    appDiv.innerHTML = `<h1>TypeScript Starter</h1>`;
    
    let rawData = [
      { name : 'orders_list', id : 10},
      { name : 'orders_price', id : 7},
      { name : 'items_list', id : 12 },
      { name : 'items_price', id : 7},
      { name : 'others-list', id : 7},
      { name : 'secondOthers-list', id : 7},
    ]
    
    
    let data = rawData.reduce((r, e) => {
    
      let group = e.name.substr(0, e.name.indexOf('_'));
    
      if(!r[group]) {
        r[group] = {group, children: [e]}
      } else {
        r[group].children.push(e);
      }
    
      return r;
    }, {})
    
    // since data at this point is an object, to get array of values
    // we use Object.values method
    let result = Object.values(data)
    var resultMap = result.map(_val => {
      return _val.group
    })
    var index = resultMap.indexOf('')
    result[index].group = 'Others'
    
    console.log(result)
    

    https://stackblitz.com/edit/typescript-6xfk3j

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2019-06-05
      • 2019-05-03
      • 2011-04-09
      • 1970-01-01
      相关资源
      最近更新 更多