【问题标题】:Check for certain value in every key of a Javascript object检查 Javascript 对象的每个键中的某个值
【发布时间】:2020-05-04 09:05:53
【问题描述】:

我有以下行:

<button className={`actionBoxButton ${props.moves[0].moveName !== "FirstPassMove" && props.moves[0].moveName !== "PassMove"  ? "actionBoxButtonGrey" : ''}`}

它的作用是检查对象“moves”是否具有键 moveName 的值“FirstPassMove”。如果是这样,我想要它,所以切换到另一种风格。这运作良好。 但我想要实现的是,不仅要检查对象的元素 0,还要检查所有对象,并检查对象的任何元素中是否存在 moveName "FirstPassMove"。 它是用 React 16.12 编写的

谢谢!

【问题讨论】:

    标签: javascript html css reactjs javascript-objects


    【解决方案1】:

    您可以通过为动态类名定义一个单独的函数来简化您的 jsx,如下所示:

    const check = () => {
    	let className_ = "";
        // if this.props.moves is an array, use of instead of in
    	for(let i in this.props.moves) {
    		if((this.props.moves[i].moveName !== "FirstPassMove") && (this.props.moves[i].moveName !== "PassMove")) {
    			className_ = "actionBoxButtonGrey";
    		}
    	}
    
    	return className_;
    }
    &lt;button className={this.check()}&gt;button&lt;/button&gt;

    【讨论】:

    • 酷,谢谢!使用带有 for 循环的外部函数的想法确实为我解决了问题
    【解决方案2】:
    props.moves.includes('FirstPassMove')
    

    假设您的props.moves 是一个数组,如果此字符串在props.moves 数组内,它将返回真或假

    【讨论】:

      【解决方案3】:

      如果您想添加 className 以防您的至少一个动作有 FirstPassMovePassMove 名称,您应该使用 Array.prototype.some()

      const hasPass = moves.some(({ moveName }) => (
        moveName === "FirstPassMove" || 
        moveName === "PassMove"
      ));
      

      【讨论】:

        【解决方案4】:

        我猜你想检查所有moves 是否满足约束,在这种情况下,你可以使用Array.prototype.every 来确保每一步都满足约束。如果你只需要一些moves 来满足约束,你可以使用Array.prototype.some 来代替。

        // For example
        const props = {
            moves: [
                { moveName: 'FirstPassMove' },
                { moveName: 'PassMove' },
                { moveName: 'PassMove' },
                { moveName: 'OtherPassMove' },
            ]
        };
        
        function isValidMove({ moveName }) {
            return moveName !== "FirstPassMove"
                && moveName !== "PassMove";
        }
        
        
        function getActionBoxButtonClassName(hasColor) {
            return `actionBoxButton ${hasColor ? "actionBoxButtonGrey" : ''}`;
        }
        
        console.log([
            getActionBoxButtonClassName(props.moves.every(isValidMove)),
            getActionBoxButtonClassName(props.moves.some(isValidMove))
        ]);

        【讨论】:

          猜你喜欢
          • 2021-02-14
          • 2022-01-18
          • 1970-01-01
          • 2014-12-26
          • 2020-01-18
          • 1970-01-01
          • 1970-01-01
          • 2012-09-19
          • 1970-01-01
          相关资源
          最近更新 更多