在函数内部的另一个if条件中读取变量的值

时间:2019-02-10 10:02:05

标签: javascript arrays json reactjs ecmascript-6

我定义了用于从JSON获取数据并将其传递到render中的函数。但是我不得不设置2种不同的条件来处理数据。

下面是函数:

filterItems = () => {
 let result = [];
 const { searchInput } = this.state;
 const filterbrandsnew = this.props.tvfilter.brand;
 if (filterbrandsnew) {
 let value = filterbrandsnew[0].options.map(({catgeory_name})=>catgeory_name);
 console.log (value);
 }
 const brand = value;
 if (searchInput) {
    result = this.elementContainsSearchString(searchInput, brand);
 } else {
    result = brand || [];
 }
 return result;
}

我想在此常量const brand = value;中使用值

使用如下所示的渲染方法访问数据:

render() {
const filteredList = this.filterItems();
return (
            <div className="filter-options">
                <ul className="languages">
                    {filteredList.map(lang => (
                        <li
                            className={lang === this.props.selectedLanguage ? 'selected' : ''}
                            onClick={this.props.onSelect.bind(null, lang)}
                            key={lang}
                        >
                            {lang}
                        </li>
                    ))}
                </ul>
            </div>
        );
}

3 个答案:

答案 0 :(得分:0)

在您的示例中

if (filterbrandsnew) {
 let value = filterbrandsnew[0].options.map(({catgeory_name})=>catgeory_name);
 console.log (value);
}
if语句中的

code创建一个单独的作用域,这意味着其中定义的任何变量都不能在外部作用域中访问。

您可以做的就是将value变量定义移到外部作用域

let value
if (filterbrandsnew) {
 value = filterbrandsnew[0].options.map(({catgeory_name})=>catgeory_name);
 console.log (value);
}

通过这种方式,value将包含undefined(如果它从未输入过if语句),或者如果需要则返回结果。

答案 1 :(得分:0)

value块之外声明if

filterItems = () => {
 let result = [];
 const { searchInput } = this.state;
 const filterbrandsnew = this.props.tvfilter.brand;
 let value;
 if (filterbrandsnew) {
    value = filterbrandsnew[0].options.map(({catgeory_name})=>catgeory_name);
    console.log (value);
 }
 const brand = value;
 if (searchInput) {
    result = this.elementContainsSearchString(searchInput, brand);
 } else {
    result = brand || [];
 }
 return result;
}

答案 2 :(得分:0)

您只需将可描述的其他数据添加到函数返回有效载荷中

JSON数据功能:

filterItems = () => {
 ...
 return { items: result, brand: value };
}

渲染功能:

render() {
const filteredHandler = this.filterItems();
const filteredList = filteredHandler.items;
const brand = filteredHandler.brand;
...